博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 monogodb 的C API 来遍历 bson 的数组对象
阅读量:5743 次
发布时间:2019-06-18

本文共 2244 字,大约阅读时间需要 7 分钟。

hot3.png

使用 monogodb 的C API 来遍历 bson 的数组对象

   使用 bson_printf 打印下数组对象 类似于这样

    ips : 4

            0 : 3
                    ip : 2   127.0.0.1:2235
            1 : 3
                    ip : 2   127.0.0.1:9666

一共有3层  第一层是 object 的名字 遍历的时候使用 bson_find 使用名字查找到 object 后 使用 bson_iterator_subobject 进入这个object 也就是进入 第二层 观察 第二次 可以发现 这个 object 的名字是字符的 0 1 2 3 ,,,也就是数组的索引  所以以后 循环构造这样的字符串 查找每一项 找到一项 就使用 bson_iterator_subobject 进入最后一层 也就是实际的数据了。。。

具体 可以参考下面的代码

01 int main()
02 {
03     mongo conn[1];
04     mongo_cursor* cursor;
05  
06     mongo_init_sockets();
07     //Parameters (connection, IP, port);
08     int status = mongo_client(conn, "127.0.0.1", 27017);
09     if(status != MONGO_OK){
10         switch(conn->err){
11         case MONGO_CONN_NO_SOCKET: printf("Socket not found\n"); return 1;
12         case MONGO_CONN_FAIL: printf("Connection Failed\n"); return 1;
13         case MONGO_CONN_NOT_MASTER: printf("Not master\n"); return 1;
14         }
15     }
16     bson query[1];
17     bson_init(query);
18     bson_append_string(query,"md5","97296BE70AC48609704936C5BDAF0312");
19     bson_finish(query);
20  
21     bson fields[1];
22     bson_init(fields);
23     bson_append_bool(fields,"md5",1);
24     bson_append_bool(fields,"ips",1);
25     bson_append_bool(fields,"urls",1);
26     bson_finish(fields);
27  
28     cursor = mongo_find(conn,"test.virus", query, fields, 9999, 0, 0);
29  
30     bson_destroy(query);
31     bson_destroy(fields);
32  
33     while(mongo_cursor_next(cursor) == MONGO_OK)
34     {
35         bson_print(mongo_cursor_bson( cursor ));
36         bson_iterator it;
37         if (bson_find(&it, &cursor->current, "ips"))
38         {
39             bson sub;
40             bson_iterator sub_it;
41             int idx = 0;
42             char key[32]={'0',0};
43             _itoa(idx,key,10);
44             bson_iterator_subobject( &it, &sub );
45             bson_print(&sub);
46             while(bson_find(&sub_it,&sub,key))
47             {
48                 bson arr;
49                 bson_type t;
50                 bson_iterator bi;
51                 bson_iterator_subobject( &sub_it, &arr);
52                 bson_iterator_init(&bi,&arr);
53                 while( (t = bson_iterator_next(&bi)))
54                 {
55                     printf("bson type : %d \n",t);
56                     switch(t)
57                     {
58                     case BSON_OBJECT:
59                     case BSON_ARRAY:
60                         {
61  
62                         }
63                         break;
64                     case BSON_STRING:
65                         printf("%s \n",bson_iterator_string(&bi));
66                         break;
67                     default:
68                         break;
69                     }
70                     printf("%s  \n",bson_iterator_key(&bi));
71                 }
72                 idx++;
73                 _itoa(idx,key,10);
74             }
75         }
76     }
77     mongo_cursor_destroy(cursor);
78     mongo_destroy(conn);
79     return 0;
80 }

转载于:https://my.oschina.net/u/347414/blog/179900

你可能感兴趣的文章
移动开发团队怎样应用 ChatOps 实现工作协同
查看>>
SwitchUserFilter源码解析
查看>>
MySQL 5.7: 把现有的复制组迁移到InnoDB Cluster
查看>>
【261天】我爱刷题系列(20)
查看>>
瞎说vuex
查看>>
如何从Enterprise Architect 导出代码
查看>>
graphql-java使用手册:part5 运行期异常(Runtime Exceptions )
查看>>
[前端工坊]如何学习React:一个五步计划
查看>>
MySQL的or/in/union与索引优化
查看>>
cookie小饼干
查看>>
前端每周清单半年盘点之 Node.js 篇
查看>>
启发:从MNS事务消息谈分布式事务
查看>>
Express 实战(五):路由
查看>>
Vue2 几种常见开局方式
查看>>
CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用
查看>>
Brackets 小技巧 | IDE
查看>>
CSS揭秘之《边框内圆角》
查看>>
【218天】黑马程序员27天视频学习笔记【Day20-21复习脑图】
查看>>
JavaScript 中基于 swagger-decorator 的自动实体类构建与 Swagger 接口文档生成
查看>>
js数据结构之栈
查看>>