MongoDB C驱动程序-构造$or查询BSON?
我正在尝试使用子例程中的以下代码创建一个$或BSON查询:MongoDB C驱动程序-构造$or查询BSON?,mongodb,Mongodb,我正在尝试使用子例程中的以下代码创建一个$或BSON查询: bson * outBson = bson_create(); bson_init(outBson); bson_append_start_object(outBson, "$query"); bson_append_start_array(outBson, "$or"); bson_append_int(outBson, "cpu", 2000); bson_a
bson * outBson = bson_create();
bson_init(outBson);
bson_append_start_object(outBson, "$query");
bson_append_start_array(outBson, "$or");
bson_append_int(outBson, "cpu", 2000);
bson_append_int(outBson, "ram", 4096);
bson_append_finish_array(outBson);
bson_append_finish_object(outBson);
bson_finish(outBson);
bson_print(outBson);
但我从mongo_find返回的游标变为NULL。我试图转储连接mongo->errstr和mongo->err代码,它们都是空的,并且为0
如果我取出bson\u append\u start/finish\u数组,基本上将其更改为$and查询,它就可以工作了。不幸的是,这不是我想要做的
如果有人能告诉我如何通过C驱动程序构造一个合适的复合查询BSON,我将不胜感激
从Mongo shell,我的数据如下:
> db.test.find()
{ "_id" : ObjectId("507d20a72dfd5c5c2534d068"), "cpu" : 1600 }
{ "_id" : ObjectId("507d23602dfd5c5c2534d069"), "cpu" : 2000 }
{ "_id" : ObjectId("507d236c2dfd5c5c2534d06a"), "cpu" : 1666 }
{ "_id" : ObjectId("507d23712dfd5c5c2534d06b"), "cpu" : 2333 }
{ "_id" : ObjectId("507d254eef456cca26234013"), "cpu" : 2000, "ram" : 4096 }
> db.test.find( { $or : [ {"cpu" : 1666}, {"cpu" : 2000} ] } )
{ "_id" : ObjectId("507d23602dfd5c5c2534d069"), "cpu" : 2000 }
{ "_id" : ObjectId("507d236c2dfd5c5c2534d06a"), "cpu" : 1666 }
{ "_id" : ObjectId("507d254eef456cca26234013"), "cpu" : 2000, "ram" : 4096 }
谢谢。好的,经过大量实验和查看源代码后,我发现bson\u append\u int bson*b,const char*name,const int I实际上并没有附加int类型的对象 我从上述结构的bson_打印中得到的是:
$or : 4
cpu : 16 2000
ram : 16 4096
4和16分别显示为“数组”类型和“int”类型。。。即使int名为cpu和ram,它们也不是对象
实际起作用的是提供一个不那么匿名的对象包装器,例如:
bson_init(outBson);
bson_append_start_array(outBson, "$or");
bson_append_start_object(outBson, "0");
bson_append_int(outBson, "cpu", 2000);
bson_append_finish_object(outBson);
bson_append_start_object(outBson, "1");
bson_append_int(outBson, "ram", 4096);
bson_append_finish_object(outBson);
bson_append_finish_object(outBson);
bson_finish(outBson);