Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB C驱动程序-构造$or查询BSON?_Mongodb - Fatal编程技术网

MongoDB C驱动程序-构造$or查询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查询:

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);