mongocxx:如何按属于另一个 field/object 的字段过滤文档?
mongocxx: How to filter documents by a field that is a member of another field/object?
在 MongoDB Compass 中,如果我使用以下内容进行过滤:
{'obj1.obj2.str': "thirteen"}
检索成功,每个有obj1的文档,在obj1内部,obj2内部,在obj2内部,一个名为str的字段,其值为“十三”。
在 mongocxx 中,如果我这样做:
mongocxx::cursor cursor = coll.find(document{} <<
"obj1.obj2.str" << "thirteen" << finalize);
它没有找到任何东西,(cursor.begin() 将等于 cursor.end())。
如果我插入的文档只是文档 ID 本身 + 另一个字段:
{"_id":{"$oid":"60008e7b1ccb5846d437f1c1"},"plswork":"result"}
然后我进入我的 C++ 程序并执行以下操作:
mongocxx::cursor cursor = coll.find(document{} <<
"plswork" << "result" << finalize);
它将准确地找到该文档。
此外,我可以通过以下方式抓取所有文档来访问“str”:
mongocxx::cursor cursor = coll.find({});
然后遍历集合中的每个文档。那时我可以清楚地看到 obj1 和 obj2 中的内部字段是什么。但是我只想获取内部字段 str 等于我给它的文档,而不是集合中的所有文档。
无法访问文档中对象内的字段,我做错了什么?
我正在使用 mongocxx 3.6.5 和 MongoDB 4.4.12。
我明白了。它似乎是损坏的数据或类似的东西,因此 mongocxx 无法对这些损坏的文档进行过滤,无论查询如何,只要查询不为空({} 会起作用)。从现在开始我插入的任何新文档都可以使用:
mongocxx::cursor cursor = coll.find(document{} <<
"obj1.obj2.str" << "thirteen" << finalize);
旧数据没有,所以我将丢弃它并继续。
在 MongoDB Compass 中,如果我使用以下内容进行过滤:
{'obj1.obj2.str': "thirteen"}
检索成功,每个有obj1的文档,在obj1内部,obj2内部,在obj2内部,一个名为str的字段,其值为“十三”。
在 mongocxx 中,如果我这样做:
mongocxx::cursor cursor = coll.find(document{} <<
"obj1.obj2.str" << "thirteen" << finalize);
它没有找到任何东西,(cursor.begin() 将等于 cursor.end())。
如果我插入的文档只是文档 ID 本身 + 另一个字段:
{"_id":{"$oid":"60008e7b1ccb5846d437f1c1"},"plswork":"result"}
然后我进入我的 C++ 程序并执行以下操作:
mongocxx::cursor cursor = coll.find(document{} <<
"plswork" << "result" << finalize);
它将准确地找到该文档。
此外,我可以通过以下方式抓取所有文档来访问“str”:
mongocxx::cursor cursor = coll.find({});
然后遍历集合中的每个文档。那时我可以清楚地看到 obj1 和 obj2 中的内部字段是什么。但是我只想获取内部字段 str 等于我给它的文档,而不是集合中的所有文档。
无法访问文档中对象内的字段,我做错了什么?
我正在使用 mongocxx 3.6.5 和 MongoDB 4.4.12。
我明白了。它似乎是损坏的数据或类似的东西,因此 mongocxx 无法对这些损坏的文档进行过滤,无论查询如何,只要查询不为空({} 会起作用)。从现在开始我插入的任何新文档都可以使用:
mongocxx::cursor cursor = coll.find(document{} <<
"obj1.obj2.str" << "thirteen" << finalize);
旧数据没有,所以我将丢弃它并继续。