在MongoDB中将多个文档合并成一个文档

3

document 1:

{
_id: abcdef,
name: "foo",
time: [1234],
doc: [1234]
}

文档 2:

{
_id: alexa,
name: "alexa",
time: [1234],
doc: [1234]
}

期望输出:

{
time[1234],
alexa[1234],
foo[1234]
}

我在MongoDB中有多个文档,我想合并这些文档,使其变成一个文档。

Playground 将多个文档合并为一个。

1个回答

2
您可以尝试以下方法:
  • 使用$addFieldsnamedoc转换为对象,并将其放置于root字段中。
  • 使用$group按照mull分组并合并根对象中的对象,使用$mergeObjects操作符。
  • 使用$addFields通过$reduce$setUnion,获取数组中所有子数组的并集时间。
  • 使用$replaceRoot通过$mergeObjects操作符替换根字段和时间字段所合并的对象。
db.collection.aggregate([
  {
    $addFields: {
      root: {
        $arrayToObject: [[{ k: "$name", v: "$doc" }]]
      }
    }
  },
  {
    $group: {
      _id: null,
      root: { $mergeObjects: "$root" },
      time: { $push: "$time" }
    }
  },
  {
    $addFields: {
      time: {
        $reduce: {
          input: "$time",
          initialValue: [],
          in: { $setUnion: ["$$this", "$$value"] }
        }
      }
    }
  },
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: ["$root", { time: "$time" }]
      }
    }
  }
])

游乐场


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接