MongoDB聚合 - 合并对象的数组

时间:2018-03-09 16:17:36

标签: mongodb aggregation-framework

我想使用聚合框架获取MongoDB 3.4中对象中所有数组的并集:

这是输入:

{ 
  _id: "001",
  name: "something",
  important_part: {
    foo: [1,2,3],
    bar: [4,5],
    x: [6,7]
  }
}

这应该是输出:

{ 
  _id: "001",
  name: "something",
  merged_arrays: [1,2,3,4,5,6,7]
}

棘手的部分是, important_part 对象中的字段是动态的,我不认为可以使用 $ setUnion 运算符,因为它需要确切的数组字段列表。

有人可以帮助我吗?

提前谢谢

1 个答案:

答案 0 :(得分:2)

您可以在3.4中使用以下聚合。

$objectToArray将对象转换为键值对数组,并将$reduce转换为$concatArrays

db.col.aggregate({
  "$addFields":{
    "merged_arrays":{
      "$reduce":{
        "input":{"$objectToArray":"$important_part"},
        "initialValue":[],
        "in":{"$concatArrays":["$$value", "$$this.v"]}
      }
    }
  }
})