gpt4 book ai didi

c++ - MongoDB C 驱动程序 mongoc_collection_find() 无法按字段找到文档

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:12 25 4
gpt4 key购买 nike

我尝试通过对象中的字段名称查找文档。我在集合名称“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 代码有什么问题,为什么不返回结果?谢谢

最佳答案

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 代码中引用)是集合名称和命名空间的混搭。它应该只包含数据库名称和集合名称。

关于c++ - MongoDB C 驱动程序 mongoc_collection_find() 无法按字段找到文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35450340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com