首页 > 解决方案 > 在 MongoDB 中合并同一集合中的两个文档

问题描述

我一直在尝试在我的名为Cities的集合中合并一些重复的文档。

考虑以下:

{
    "_id": 1,
    "Name": "Santa Monica",
    "State": "California"
},
{
    "_id": {"$oid":"5ec5fcc993ce00388429278a"},
    "Name": "Santa Monica",
    "State": "California",
    "TimeZone": "UTC−8",
    "Population": 90401,
    "State": "California"
}

第二个条目确实包含更多信息,例如 TimeZone 和 Population。我只想将两者合并到一个对象中,_id像这样保留第一个对象:

{
    "_id": 1
    "Name": "Santa Monica",
    "State": "California",
    "TimeZone": "UTC−8",
    "Population": 90401,
    "State": "California"
}

我知道我必须使用聚合但不知道如何。该文档缺少一个明确的示例来说明如何在同一个集合中执行此操作。

提前致谢。

标签: mongodbmergenosqlaggregation-frameworkaggregation

解决方案


您需要按NameState字段对文档进行分组并合并它们。

试试这个:

db.Cities.aggregate([
  {
    $group: {
      _id: {
        "Name": "$Name",
        "State": "$State"
      },
      data: {
        $push: "$$ROOT"
      }
    }
  },
  {
    "$replaceWith": {
      "$mergeObjects": {
        "$reverseArray": "$data"
      }
    }
  }
])

Mongo游乐场

注意: $reverseArray允许翻转分组数组


推荐阅读