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"
          }
        ]
      ]
    }
  }
}