如何将对象数组转换为MongoDB父对象中的字段?

时间:2019-07-02 17:48:10

标签: arrays mongodb mongodb-query aggregation-framework

我有一个集合,其中每个文档都具有这种结构:

{
  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 个答案:

答案 0 :(得分:2)

您可以使用以下汇总

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

MongoPlayground