我尝试按字段名称查找文档,该文件名是对象内部。 我在集合名称“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代码有什么问题,为什么它没有给我回复结果? 感谢
答案 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。它应该只包含数据库名称和集合名称。