首先,请允许我说这个问题与我在mongo
中看到的有关嵌套数组的其他问题略有不同。
他们中的大多数人都会问如何在嵌套数组中获取特定元素。我想得到一个数组的所有元素,它自己有另一个包含给定值的数组。
我有文件,看起来像这样:
{
_id: something,
value: something,
items: [{
name: someItem,
price: somePrice,
stores:[
{name: storeName, url: someUrl },
{name: anotherStoreName, url: someOtherUrl}
]
},
{
name: someOtherItem,
price: someOtherPrice,
stores:[
{name: storeName, url: someUrl },
{name: yetAnotherStoreName, url: someOtherUrl}
]
}]
}
我想要的是只获取在stores数组中具有给定商店的items元素。
这是,如果我问storeName
,我应该在示例中获得这两个项目。但是如果我要求anotherStoreName
,我应该只获得数组项的第一个元素。
搜索类似问题并尝试解决方案我只能获得项目的第一个匹配元素,但我想要所有匹配元素。
我很感激任何帮助。
答案 0 :(得分:1)
您应该使用mongo aggregation以下列方式获得结果。
首先使用$unwind分隔items
数组,然后添加匹配条件。
db.collection.aggregate([{
$unwind: "$items"
}, {
$match: {
"items.stores.name": "storeName"
}
}, {
$project: {
_id: 0,
items: "$items" //you can add multiple fields here
}
}]);
答案 1 :(得分:0)
您应该使用聚合框架来展开items数组上的元素,然后将它们视为单独的文档。
db.data.aggregate([
{
$unwind: "$items"
},
{
$project: {
_id: 0,
items: "$items"
}
},
{
$match: {
"items.stores.name": "yetAnotherStoreName"
}
}
]);
结果。