如何从 mongodb 中的嵌套数组中的字段名称 select?

How to select from field name from nested arrays in mongodb?

我有一个包含嵌套数组的文档,但我不知道如何从字段中 select。

我想要 select 所有 "components" 具有 "mast" 的文档。

我试过了。

db.sites.find({"components": "mast" }).pretty();

db.sites.find({"components.$": "mast" }).pretty();

db.sites.find({"components.$.$": "mast" }).pretty();

db.sites.find({"components.$.$.mast": {$exists: true} }).pretty();

db.sites.find({"components.$.mast": {$exists: true} }).pretty();

db.sites.find({"components.mast": {$exists: true} }).pretty();

以及其他一些失败的尝试。

{
    "_id" : ObjectId("23456yujbvfdfg"),
    "d": 1234567,
    "components" : [
        [
            "mast",
            {
                "foo":"bar"
            }
        ],
        [
            "commsbox",
            {
                "BLARN": "bAAA"
            }
        ]
    ]
}

我的尝试只返回空白结果。

您可以使用 $elemMatch

db.sites.find(
   { "components": { $elemMatch:  { $elemMatch:  {$eq:"mast"}  } }}
)

这应该有效

db.sites.find({
    "components": {
            $elemMatch: {
                $elemMatch: { $in: ['mast'] }
            }
    } 
})

如果您将组件维护为数组,那么您的查询应该如下所示

db.test.find({ "components": { $elemMatch:  { $elemMatch:  {$eq:"mast"}  } }})

我已经根据您共享的架构发布了解决方案,但我确定架构需要更改