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 将多个文档合并为一个。
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 将多个文档合并为一个。
$addFields
将name
和doc
转换为对象,并将其放置于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" }]
}
}
}
])