如何在mongodb聚合中将对象数组转换为对象

时间:2020-03-23 15:52:54

标签: mongodb mongoose aggregation-framework

我问过this question here,我得到了satisfactory answer。但是我有一个新的问题无法解决。

我从query获得的输出是对象数组。如何将该数组转换为对象?我已经知道how to do it in plain javascript,但是如何在mongodb聚合查询中做到这一点?

您可以假定聚合查询中具有以下数据。

[
    {  "choiceA": [
            {"_id": ObjectId("..."), "voter": "Juzi", "choice": 0, "pollId": 100 },
            {"_id": ObjectId("..."), "voter": "Juma", "choice": 0, "pollId": 100 },
            {"_id": ObjectId("..."), "voter": "Jane", "choice": 0, "pollId": 100 },
    ]},
    {  "choiceB": [
            {"_id": ObjectId("..."), "voter": "Jamo", "choice": 1, "pollId": 100 },
            {"_id": ObjectId("..."), "voter": "Juju", "choice": 1, "pollId": 100 },
            {"_id": ObjectId("..."), "voter": "Jana", "choice": 1, "pollId": 100 }
    ]},
    {  "choiceC": [ ] }
]

如何将其变成如下所示的对象

{
    "choiceA": [
            {"_id": ObjectId("..."), "voter": "Juzi", "choice": 0, "pollId": 100 },
            {"_id": ObjectId("..."), "voter": "Juma", "choice": 0, "pollId": 100 },
            {"_id": ObjectId("..."), "voter": "Jane", "choice": 0, "pollId": 100 },
    ],
    "choiceB": [
            {"_id": ObjectId("..."), "voter": "Jamo", "choice": 1, "pollId": 100 },
            {"_id": ObjectId("..."), "voter": "Juju", "choice": 1, "pollId": 100 },
            {"_id": ObjectId("..."), "voter": "Jana", "choice": 1, "pollId": 100 }
    ],
    "choiceC": [ ] 
}

或者您也可以将上面的结果作为输出来回答this question。谢谢。

1 个答案:

答案 0 :(得分:1)

将以下步骤添加到您的管道中:

db.collection.aggregate([
  {
    $group: {
      _id: null,
      x: {
        $push: "$$ROOT"
      }
    }
  },
  {
    $project: {
      _id: 0,
      x: {
        $mergeObjects: "$x"
      }
    }
  },
  {
    $replaceRoot: {
      newRoot: "$x"
    }
  }
])

MongoPlayground