我有下面两个关于集合的文档。我需要按经理级别分组的输出,以及在他的团队下分配的项目列表。
输入
{
"emp" : "emp1",
"itemList" : [
"item1",
"item2",
"item3",
"item4"
],
"reportingTo" : "manager1"
}
{
"emp" : "emp2",
"itemList" : [
"item5",
"item2",
"item3",
"item4"
],
"reportingTo" : "manager1"
}
输出:
{
"reportingTo":"manager1",
"itemList" : [
"item1",
"item2",
"item3",
"item4",
"item5"
]
}
您可以使用以下聚合
db.collection.aggregate([
{ "$group": {
"_id": "$reportingTo",
"itemList": {
"$addToSet": "$itemList"
}
}},
{ "$project": {
"reportingTo": "$_id",
"itemList": {
"$reduce": {
"input": "$itemList",
"initialValue": [],
"in": { "$setUnion": ["$$this", "$$value"] }
}
}
}}
])