我想使用聚合框架获取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 运算符,因为它需要确切的数组字段列表。
有人可以帮助我吗?
提前谢谢
答案 0 :(得分:2)
您可以在3.4中使用以下聚合。
$objectToArray
将对象转换为键值对数组,并将$reduce
转换为$concatArrays
。
db.col.aggregate({
"$addFields":{
"merged_arrays":{
"$reduce":{
"input":{"$objectToArray":"$important_part"},
"initialValue":[],
"in":{"$concatArrays":["$$value", "$$this.v"]}
}
}
}
})