我有一个Mongodb文档,其中包含一个深深嵌入文档中的数组。在我的一个操作中,我想返回整个文档,但过滤掉那个与该标准不匹配的数组元素。
以下是一些简化数据:
{
id: 123 ,
vehicles : [
{name: 'Mercedes', listed: true},
{name: 'Nissan', listed: false},
...
]
}
因此,在此示例中,我想要整个文档,但我希望vehicles
数组只包含listed
属性设置为true
的对象。
解决方案
理想情况下,我正在寻找使用mongo查询的解决方案(例如`$ unwind,$ elemMatch等...)但我也使用mongoose所以使用Mongoose的解决方案是可以的。
答案 0 :(得分:3)
您可以使用这样的聚合框架:
db.test312.aggregate(
{$unwind:"$vehicles"},
{$match:{"vehicles.name":"Nissan"}},
{$group:{_id:"$_id",vehicles:{$push:"$vehicles"}}}
)
答案 1 :(得分:1)
您可以在展开的equals true展开和匹配后对组使用$addToSet
。
示例shell查询:
db.collection.aggregate([
{
$unwind: "$vehicles"
},
{
$match: {
"vehicles.listed": {
$eq: true
}
}
},
{
$group: {
_id: "$id",
vehicles: {
"$addToSet": {
name: "$vehicles.name",
listed: "$vehicles.listed"
}
}
}
},
{
$project: {
_id: 0,
id: "$_id",
vehicles: 1
}
}
]).pretty();