Как превратить массив объектов в объект в агрегации mongodb - PullRequest
1 голос
/ 23 марта 2020

Я задал этот вопрос здесь и получил удовлетворительный ответ . Но у меня есть новая проблема, которую я не могу решить.

Вывод, полученный из запроса , представляет собой массив объектов. Как я могу превратить этот массив в объект? Я уже знаю как это сделать простым 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": [ ] 
}

Или вы можете просто ответить на этот вопрос с приведенным выше результатом в качестве вывода , Спасибо.

1 Ответ

1 голос
/ 23 марта 2020

Добавьте эти шаги в ваш конвейер:

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

MongoPlayground

...