Как преобразовать массив объектов в поля родительского объекта в MongoDB? - PullRequest
1 голос
/ 02 июля 2019

У меня есть коллекция, где каждый документ имеет такую ​​структуру:

{
  docName: "Document Name",
  probabilities: [
            { topicName:"topic1", prob: 0.3  },
            { topicName:"topic2", prob: 0.4  }, 
            { topicName:"topic3", prob: 0.23 }
              ...
            ]
 otherField: data,
 ...
}

Мне нужно преобразовать их в нечто вроде этого:

{
  docName: "Document Name",
  topic1: 0.3,
  topic2: 0.4, 
  topic3: 0.23,
  ...
  otherField: data,
  ...
}

Я пытался использовать $ arrayToObject и $ objectToArray, но я не понял, как заставить это работать.

Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 02 июля 2019

Вы можете использовать ниже агрегации

db.collection.aggregate([
  { "$replaceRoot": {
    "newRoot": {
      "$mergeObjects": [
        "$$ROOT",
        { "$arrayToObject": {
          "$map": {
            "input": "$probabilities",
            "in": {
              "k": "$$this.topicName",
              "v": "$$this.prob"
            }
          }
        }}
      ]
    }
  }},
  { "$project": { "probabilities": 0 }}
])

MongoPlayground

...