MongoDb 聚合转换数组中的常见对象
MongoDb Aggregate transform common objects in arrays
我遇到了一个问题:
我要改造:
[ {a:1 , b:2 , c:3} , {a:5, b:6, c:7} ]
进入:
[{a:[1,5], b:[2,6] , c: [3,7]}]
只需查找常用键并将其分组。
我不确定我应该使用 $project + $reduce 还是 $group。有人有提示吗?
为此,我们应该先将对象更改为数组,以便能够按键分组。你可以查看一下here.
{
"$project": {
"_id": 0 // First we have to eliminate the _id and all the other fields that we dont want to group
}
},
{
"$project": {
"arr": {
"$objectToArray": "$$ROOT"
}
}
},
然后我们展开这个数组并对键进行分组。
{
"$unwind": "$arr"
},
{
"$group": {
"_id": "$arr.k",
"field": {
"$push": "$arr.v"
}
}
}
最后,我们将信息重新映射为所需的输出。
{
$replaceRoot: {
newRoot: {
$arrayToObject: [
[
{
k: "$_id",
v: "$field"
}
]
]
}
}
}
我遇到了一个问题:
我要改造:
[ {a:1 , b:2 , c:3} , {a:5, b:6, c:7} ]
进入:
[{a:[1,5], b:[2,6] , c: [3,7]}]
只需查找常用键并将其分组。
我不确定我应该使用 $project + $reduce 还是 $group。有人有提示吗?
为此,我们应该先将对象更改为数组,以便能够按键分组。你可以查看一下here.
{
"$project": {
"_id": 0 // First we have to eliminate the _id and all the other fields that we dont want to group
}
},
{
"$project": {
"arr": {
"$objectToArray": "$$ROOT"
}
}
},
然后我们展开这个数组并对键进行分组。
{
"$unwind": "$arr"
},
{
"$group": {
"_id": "$arr.k",
"field": {
"$push": "$arr.v"
}
}
}
最后,我们将信息重新映射为所需的输出。
{
$replaceRoot: {
newRoot: {
$arrayToObject: [
[
{
k: "$_id",
v: "$field"
}
]
]
}
}
}