我希望在MongoDB中使用$ reduce和$ setUnion合并嵌套数组。以下是示例输入-
levels: [
[[80,100,120]],[[100,150]],[[200,80,100]],[[80,100]]
]
我想要得到的输出(即,将嵌套数组与唯一值合并)- 级别:[80,100,120,150,100]
我可以使用两种方法获得以上输出-
1)在管道中使用两个$ project阶段-
aggregate([
$project: { levels : { $reduce: {
input: "$levels", initialValue: [], in:{$setUnion:["$$value","$$this"]}}}},
$project: { levels : { $reduce: {
input: "$levels", initialValue: [], in:{$setUnion:["$$value","$$this"]}}}}
])
2)首先$ unwind,然后$ project
aggregate([
$unwind: { '$levels'}},
$project: { levels : { $reduce: {
input: "$levels", initialValue: [], in:{$setUnion:["$$value","$$this"]}}}}
])
在我不需要两次使用相同的$ project的情况下,有什么改进的首选方法?我正在努力避免放松。
答案 0 :(得分:1)
您可以在单个$project
阶段使用以下汇总
db.collection.aggregate([
{ "$project": {
"levels": {
"$reduce": {
"input": {
"$reduce": {
"input": "$levels",
"initialValue": [],
"in": { "$setUnion": ["$$this", "$$value"] }
}
},
"initialValue": [],
"in": { "$setUnion": ["$$this", "$$value"] }
}
}
}}
])