定義
各グループの入力ドキュメントを組み合わせて作成したドキュメントを返します。
$mergeObjectsアキュムレータは、次のステージで使用できます。
注意
曖昧さ回避
このページでは、アキュムレータとして使用する場合の$mergeObjects について説明します。アキュムレータは、入力ドキュメントのグループにわたる集計値を返します。
また、ドキュメントの配列を$mergeObjects (expression) 1 つのドキュメントにマージする を使用することもできます。
構文
{ $mergeObjects: <expression> }
動作
$mergeObjects は null 入力値を無視します。すべての入力値が null の場合、$mergeObjects は空のドキュメント{ } を返します。
$mergeObjects は、ドキュメントをマージするときにフィールド値を上書きします。複数の入力ドキュメントが同じフィールド名を含む場合、出力には、競合するフィールドを含む最後の入力ドキュメントの値が含まれます。
例
movieReviews コレクションを作成します。
db.movieReviews.insertMany( [ { title: "Galactic Odyssey", source: "filmCritic", data: { rating: 8.1, votes: 1482903 } }, { title: "Galactic Odyssey", source: "viewerVault", data: { tomatometer: 79, audienceScore: 85 } }, { title: "Neon Horizon", source: "filmCritic", data: { rating: 7.4, votes: 983201 } }, { title: "Neon Horizon", source: "viewerVault", data: { tomatometer: 68, audienceScore: 74 } }, { title: "The Last Protocol", source: "filmCritic", data: { rating: 8.7, votes: 2104567 } }, { title: "The Last Protocol", source: "viewerVault", data: { tomatometer: 91, audienceScore: 88 } } ] )
各映画には2つのドキュメントがあります:
ratingフィールドとvotesフィールドを持つ Filmcritic の 1 つの。tomatometerフィールドとaudienceScoreフィールドを持つ viewVault の 1 つ。
2 つのソースドキュメントは異なるフィールド名を持つため、$mergeObjects はそれらを 4 つのフィールドすべてを含む完全なプロファイルに結合できます。
次のパイプラインでは、$mergeObjects $groupステージで を使用して、各ソースからのレビュー データを各映画の 1 つのドキュメントに結合します。
db.movieReviews.aggregate( [ { $group: { _id: "$title", allRatings: { $mergeObjects: "$data" } } }, { $sort: { _id: 1 } } ] )
上記のパイプラインでは、