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

旧数据没有,所以我将丢弃它并继续。