首页 > 解决方案 > 嵌套对象内的 MongoDB 查询

问题描述

我正在尝试查询我的文档,看起来像这样

"approvals" : {
    "REV" : "",
    "SS" : "",
    "ABC" : {
        "status" : "Sent for approval",
        "approved_at" : "",
        "approved_by" : "",
    },
    "XYZ" : {
        "status" : "Approved",
        "approved_by" : "xxx@abc.com",
        "approved_at" : ISODate("2020-01-06T09:48:22.777Z"),
    },....
}

Approval对象可以有多个子文档,例如ABC,XYZ ...等,我需要查询此“批准”是否有任何"status"未处于APPROVED状态的子文档

标签: mongodbmongodb-query

解决方案


您需要运行$objectToArray来扫描您的动态密钥。然后你需要$anyElementTrue$map来检查是否有任何Approved值:

db.collection.find(
    { 
        $expr: { 
            $anyElementTrue: { 
                $map: { 
                    input: { $objectToArray: "$approvals" },
                    in: { $ne: [ "$$this.v.status", "Approved" ] } 
                }
            } 
        }
})

蒙戈游乐场


推荐阅读