有没有办法从没有根文档的集合的字段(数组)中选择所有嵌入的文档?例如,给定这个集合
{ "_id" : 1, "cars" : [{"brand": "audi", "color": "red"}, {"brand": "audi", "color": "yellow"}]}
{ "_id" : 2, "cars" : [{"brand": "audi", "color": "blue"}, {"brand": "seat"}]}
我想选择品牌audi
的所有车辆,输出如下
{"brand": "audi", "color": "red"}
{"brand": "audi", "color": "blue"}
{"brand": "audi", "color": "yellow"}
只有db.collection.find()
与projection
似乎不可能,因为其匹配条件始终与根文档相关。
答案 0 :(得分:-1)
您可以使用以下聚合:
$unwind
你汽车阵列$match
只有奥迪brand
$group
by brand&用于删除重复项的颜色$project
重新组织输出查询是:
db.cars.aggregate([{
$unwind: '$cars'
}, {
$match: {
'cars.brand': 'audi'
}
}, {
$group: {
'_id': { 'brand': '$cars.brand', 'color': '$cars.color' }
}
}, {
$project: {
_id: 0,
'brand': '$_id.brand',
'color': '$_id.color'
}
}])