【问题标题】:How to turn an array of objects into an object in mongodb aggregation如何将对象数组转换为mongodb聚合中的对象
【发布时间】:2020-03-23 15:52:54
【问题描述】:

我问过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,并将上面的结果作为输出。谢谢。

【问题讨论】:

    标签: mongodb mongoose aggregation-framework


    【解决方案1】:

    将这些步骤添加到您的管道中:

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

    MongoPlayground

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多