ドキュメント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に複数のドキュメントがありますが、ドキュメントをマージして1つのドキュメントにします。
Playgroundは、複数のドキュメントを1つにマージします。
あなたが試すことができます、
$addFields
フィールドで使用$arrayToObject
して名前とドキュメントをオブジェクトとして変換しroot
ます$group
を使用してルート内のオブジェクトをマルおよびマージする $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" }]
}
}
}
])
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加