mongodb-基于条件字段合并两个对象

mongodb-基于条件字段合并两个对象,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,假设我们有以下由聚合管道生成的文档: [ { "_id": ObjectId("5a934e000102030405000000"), "description": "description for item 1", "item_code": "00001" }, { "_id": ObjectId("5

假设我们有以下由聚合管道生成的文档:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "description": "description for item 1",
    "item_code": "00001"
  },
  {
    "_id": ObjectId("5a934e000102030405000001"),
    "description": "description for item 2",
    "item_code": "00002"
  },
  {
    "_id": ObjectId("5a934e000102030405000002"),
    "description": "description for item 3",
    "item_code": "00003"
  },
  {
    "_id": ObjectId("5a934e000102030405000003"),
    "extrafield": "extra field for item 2",
    "item_code": "00002"
  }
]
如何将具有相同
项目\u code
的文档合并为一个文档,并保留所有属性? 预期结果:

[
  {
    "description": "description for item 1",
    "item_code": "00001"
  },
  {
    "description": "description for item 2",
    "extrafield": "extra field for item 2",
    "item_code": "00002"
  },
  {
    "description": "description for item 3",
    "item_code": "00003"
  }
]
我尝试了不同的
$group
模式,但没有成功:(

你可以试试

  • $group
    项_code
    ,使用
    $mergeObjects
    $$ROOT
    合并对象
  • $replaceWith
    将根对象替换为根对象

谢谢@turivishal。我正朝着这个方向前进,但使用$push:“$$ROOT”(而不是$mergeObjects:“$$ROOT”)却没有成功。老实说,我不明白为什么你的解决方案有效,而我的解决方案无效:)按id分组意味着,组拥有所有分组对象,
$mergeObjects
将在单个对象中合并对象。
db.collection.aggregate([
  {
    $group: {
      _id: "$item_code",
      root: { $mergeObjects: "$$ROOT" }
    }
  },
  { $replaceWith: "$root" }
])