AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

$mergeObjects(アキュムレータ演算子)

$mergeObjects

各グループの入力ドキュメントを組み合わせて作成したドキュメントを返します。

$mergeObjects アキュムレータは次のステージで使用可能です。

注意

曖昧さ回避

このページでは、$mergeObjects をアキュムレータとして使用する場合について説明します。アキュムレータは、入力ドキュメントのグループ全体で集計値を返します。

$mergeObjects は、これらの他のコンテキストでも使用できます。

{ $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 } }
] )

上記のパイプラインでは、

  • $group は、title でドキュメントをグループ化し、$mergeObjects を使用して各ソースからの data つのサブドキュメントを統合します。FilmCritic ドキュメントと ViewerVault ドキュメントには異なるフィールド名が含まれているため、統合された結果には両方のソースからのすべてのフィールドが含まれます。

  • $sort 結果をタイトルでアルファベット順にソートします。

このページを評価