如何从MongoDB中对象数组的子文档字段中获取唯一数组

时间:2018-07-10 09:18:21

标签: mongodb mongodb-query

假设您的文档集中有一个文档,每个文档中都有一个对象数组,并且您想在投影中获得这些对象中某个字段的不同数组,您该怎么做?

例如,您的收藏集包含2个文档:

db.products.insertMany([
            {name:"A",subarray:[{id:1,value:1},{id:1,value:2},{id:2,value:3}]},
            {name:"B",subarray:[{id:1,value:1},{id:2,value:2},{id:3,value:3}]},
            {name:"C",subarray:[{id:2,value:1},{id:2,value:2},{id:3,value:3}]}])

,您想得到这个(每个文档ID的unique_id数组):

{ "name" : "a", "unique_id" : [ 1, 2 ] }
{ "name" : "b", "unique_id" : [ 1, 2, 3 ] }
{ "name" : "b", "unique_id" : [ 2, 3 ] }

你怎么做到的?

1 个答案:

答案 0 :(得分:0)

您可以使用$reduce$setUnion来做到这一点:

db.products.aggregate([{
    $project:{
        _id:0,
        name:1,
        unique_id:{
            $reduce:{
                input: "$subarray.id",
                initialValue: [],
                in: {
                  $setUnion: ["$$value", ["$$this"]]
                }
            }
        }
    } 
}])