mongodb - 根据条件字段合并两个对象

cri*_*lla 3 mongodb mongodb-query aggregation-framework

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

[
  {
    "_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"
  }
]
Run Code Online (Sandbox Code Playgroud)

如何将相同的文档合并item_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"
  }
]
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的$group模式但没有成功:(

这里是 mongodb 游乐场

tur*_*hal 5

你可以试试,

  • $groupby item_code,使用$mergeObjectswith合并对象$$ROOT
  • $replaceWith 将根对象替换为根
db.collection.aggregate([
  {
    $group: {
      _id: "$item_code",
      root: { $mergeObjects: "$$ROOT" }
    }
  },
  { $replaceWith: "$root" }
])
Run Code Online (Sandbox Code Playgroud)

操场