定義
各グループの入力ドキュメントを組み合わせて作成したドキュメントを返します。
$mergeObjects アキュムレータは次のステージで使用可能です。
注意
曖昧さ回避
このページでは、$mergeObjects をアキュムレータとして使用する場合について説明します。アキュムレータは、入力ドキュメントのグループ全体で集計値を返します。
$mergeObjects は、これらの他のコンテキストでも使用できます。
$mergeObjects (expression)、これによりドキュメントの配列が1つのドキュメントに統合されます。$mergeObjects (window function)は、$setWindowFieldsステージで、ウィンドウ内のドキュメントからマージされたドキュメントを返すために使用されます。
構文
{ $mergeObjects: <expression> }
<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 つのドキュメントがあります。
filmCritic にある
ratingとvotesフィールドを持つアイテム。viewerVault からの 1 つで、
tomatometerとaudienceScoreフィールドを持つもの。
2 つのソース ドキュメントはフィールド名が異なるため、$mergeObjects は、4 つのフィールドすべてを含む完全なプロフィールに統合できます。
以下のパイプラインでは、$mergeObjects` を使用して $group ステージで、各ソースからのレビューデータを統合し、各映画のドキュメントを 1 つのドキュメントにまとめます。
db.movieReviews.aggregate( [ { $group: { _id: "$title", allRatings: { $mergeObjects: "$data" } } }, { $sort: { _id: 1 } } ] )
上記のパイプラインでは、