MongoDB C驱动程序mongoc_collection_find()找不到Document by字段

时间:2016-02-17 07:26:25

标签: c++ c mongodb

我尝试按字段名称查找文档,该文件名是对象内部。 我在集合名称“TestCollection”

中有这个1文档
{
    "_id" : ObjectId("56c2f0f3892b312e740041a1"),
    "Obj" : {
        "Type" : 0,
        "Num" : NumberLong(1111111111111)
    }
}

基于本教程:http://api.mongodb.org/c/current/tutorial.html#find
关于“查找”的这个API文档,我知道我需要使用点符号来搜索Obj.Num 我试着找到这样的文件:

mongoc_collection_t *collection  = NULL;
mongoc_cursor_t *cursor  = NULL;
const bson_t *doc  = NULL;
char *str = NULL;
bson_t * query = bson_new ();
std::string str;
bool b = BSON_APPEND_INT64(query,"TestCollection.Num",1111111111111);
// b is true
collection = mongoc_client_get_collection(m_mogoClient,"CollectionDB","Obj.Num");
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);




 while (mongoc_cursor_next (cursor, &doc)) {
             //it is never gets here to print the document 
             str = bson_as_json (doc, NULL);
             printf ("%s\n", str);
             bson_free (str);
}

bson_destroy (query);
mongoc_cursor_destroy (cursor);
mongoc_collection_destroy (collection);

测试查询我在mongoDB shell中运行它 我确实收到了你看到的文件结果:

> use CollectionDB
switched to db CollectionDB
> db
Collection
> db.TestCollection.find(
... {
... "Obj.Num":1111111111111
... }
... )
{ "_id" : ObjectId("56c2f0f3892b312e740041a1"), "Obj" : { "Type" : 0, "Num" : NumberLong("1111111111111") } }

>

c代码有什么问题,为什么它没有给我回复结果? 感谢

1 个答案:

答案 0 :(得分:1)

bool b = BSON_APPEND_INT64(query,"Obj.Num",1111111111111);
collection = mongoc_client_get_collection(m_mogoClient,"CollectionDB","TestCollection");
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);

希望你现在明白了。

bson b(line1)中的点符号需要是字段的命名空间

集合名称(第2行&在shell代码中引用)是集合名称和命名空间的mashup。它应该只包含数据库名称和集合名称。