我使用以下文档架构:

//User Document
 {
     "_id": "0610457c-b25b-4e73-b859-11987a3fe271",
     "FirstName": "Some Name",
     "LastName": "surname",
     // it is array of ledger items
     "LedgerBook": [
            {
                "AccountId": "aadfgdf6319d3-1a12-4575-9776-c6653sdfg5c32527",
                "TransactionId": "ef98bbc4-3efb-46dc-b632-5adfgdfg1fcc378446",
                ....
            },
            ...
      ]

当我尝试应用查询db.users.find({ "LedgerBook" : { "$type" : 4 } }).limit(50);时,它什么也不返回,但是对于查询db.users.find({ "LedgerBook" : { "$type" : 3 } }).limit(50);来说效果很好(返回所有具有LedgerBook项目的文档)。

为什么会发生?

type = 4是数组,type = 3是对象。

我想获取所有具有至少一个LedgerBook项目的文档。

最佳答案

当您查询数组时,测试在概念上应用于数组的每个元素,直到它为其中一个元素返回 true,或者直到到达数组的末尾。

所以查询:

db.items.find({ LedgerBook : { $type : 4 }})

实际上意味着:查找 LedgerBook 数组的至少一项本身就是一个数组的所有文档。尽管 LedgerBook 本身是一个数组,但它的元素都不是,因此没有文档与查询匹配。

如果您只想查询具有 LedgerBook 元素的文档,您可以使用:
db.items.find({ LedgerBook : { $exists : true }})

关于使用 $type 运算符的 mongodb 查询不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5595707/

10-12 16:03
查看更多