如何将多个文档合并成一个唯一的键值文档?

How to merge several documents into a unique key value document?

我正在尝试将一组文档合并到集合 A

{'s': 'v1', 'id': 1}
{'s': 'v2', 'id': 2}
{'s': 'v3', 'id': 3}
{'s': 'v4', 'id': 4}

作为休闲键值对的唯一文档。

{
   'v1': 1,
   'v2': 2,
   'v3': 3,
   'v4': 4
}

您能否建议一种使用独特的 MongoDB 命令而不将数据保存在另一个集合中的方法?

  • "$group"$addToSet 创建一个包含来自所有文档的 key/value 对的数组
  • $set$arrayToObject 从前一阶段生成的数组中创建一个对象并将其分配给 result 字段
  • $replaceRoot 用上一步生成的结果字段替换根
db.collection.aggregate([
  {
    "$group": {
      "_id": null,
      "result": {
        "$addToSet": {
          "k": "$s",
          "v": "$id"
        }
      }
    }
  },
  {
    "$set": {
      "result": {
        "$arrayToObject": "$result"
      }
    }
  },
  {
    "$replaceRoot": {
      "newRoot": "$result"
    }
  }
])

Working example