如何从mongodb中的嵌套数组中选择字段名?

问题描述 投票:1回答:3

我有一个嵌套数组的文档,我无法弄清楚如何从一个字段中选择。

我想选择“组件”具有“桅杆”的所有文档。

我试过了。

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"
            }
        ]
    ]
}

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

mongodb arr
3个回答
1
投票

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

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

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


2
投票

你可以使用$elemMatch

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

1
投票

这应该工作

db.sites.find({
    "components": {
            $elemMatch: {
                $elemMatch: { $in: ['mast'] }
            }
    } 
})
© www.soinside.com 2019 - 2024. All rights reserved.