MongoDB按标准选择所有嵌入文档,不带root

时间:2016-12-27 15:16:04

标签: mongodb

有没有办法从没有根文档的集合的字段(数组)中选择所有嵌入的文档?例如,给定这个集合

{ "_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似乎不可能,因为其匹配条件始终与根文档相关。

1 个答案:

答案 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'
    }
}])