繁体   English   中英

MongoDB查询嵌套数组

[英]MongoDB Querying Nested Arrays

我在查询Mongo Collection时遇到了一些麻烦。

我有一个这样的收藏:

{
"_id" : "555bd34329de3cf232434ef2",
"cars" : [ 
    {
        "0" : {
            "parts" : [ 
                {
                    "name" : "x1",
                    "price" : 12
                },
                {
                    "name" : "x2",
                    "price" : 14
                }
            ]
        },
        "1" : {
            "parts" : [ 
                {
                    "name" : "y1",
                    "price" : 8
                },
                {
                    "name" : "y2",
                    "price" : 12
                }
            ]
        } 
    }
]
}

我只想返回以下内容:

"parts" : [ 
    {
        "name" : "x1",
        "price" : 12
    },
    {
        "name" : "x2",
        "price" : 14
    }
]

换句话说,我需要弄清楚如何通过两个参数同时查询Collection:

  • ID匹配“ 555bd34329de3cf232434ef2”

  • 零件的“名称”与“ x1”匹配

有谁知道如何做这种嵌套查询?

假设这样的文档结构:

{
    "_id" : ObjectId("555bd34329de3cf232434ef2"),
    "cars" : [ 
        {
            "parts" : [ 
                {
                    "name" : "x1",
                    "price" : 12
                }, 
                {
                    "name" : "x2",
                    "price" : 14
                }
            ]
        }, 
        {
            "parts" : [ 
                {
                    "name" : "y1",
                    "price" : 8
                }, 
                {
                    "name" : "y2",
                    "price" : 12
                }
            ]
        }
    ]
}

您可以运行以下查询:

db.collection.find({ "_id": ObjectId("555bd34329de3cf232434ef2"), "cars.parts.name" : "x1" }, { "_id": 0, "cars.$": 1 })

这将使您非常接近想要的位置:

{
    "cars" : [ 
        {
            "parts" : [ 
                {
                    "name" : "x1",
                    "price" : 12
                }, 
                {
                    "name" : "x2",
                    "price" : 14
                }
            ]
        }
    ]
}

如果这还不够好,您可以更进一步地使用聚合框架...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM