AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

$merges(式)

$mergeObjects

ドキュメントの配列を単一のドキュメントにマージします。

注意

曖昧さ回避

このページでは、ドキュメントの配列をマージする式として使用される場合の$mergeObjects について説明します。

また、入力ドキュメントのグループにまたがるマージされたドキュメントを返す$mergeObjects (accumulator) を使用することもできます。

式として使用する場合、$mergeObjects は次の構文をとります。

{ $mergeObjects: <expression> }

<expression> オペランドは次のいずれかになります。

  • マージするドキュメントの配列として評価される単一の式。例、$blogPosts はドキュメントフィールドblogPosts にドキュメントの配列が含まれています。

  • 式の配列。それぞれがドキュメントとして評価されます。例、[ "$doc1", "$doc2", "$doc3" ] では、各ドキュメントフィールドに 1 つのドキュメントが含まれます。

$mergeObjects は null 入力値を無視します。すべての入力値が null の場合、$mergeObjects は空のドキュメント{ } を返します。

$mergeObjects は、ドキュメントをマージするときにフィールド値を上書きします。複数の入力ドキュメントが同じフィールド名を含む場合、出力には、競合するフィールドを含む最後の入力ドキュメントの値が含まれます。

例
結果
{ $mergeObjects: [ { a: 1 }, null ] }
{ a: 1 }
{ $mergeObjects: [ null, null ] }
{ }
{
$mergeObjects: [
{ a: 1 },
{ a: 2, b: 2 },
{ a: 3, c: 3 }
]
}
{ a: 3, b: 2, c: 3 }
{
$mergeObjects: [
{ a: 1 },
{ a: 2, b: 2 },
{ a: 3, b: null, c: 3 }
]
}
{ a: 3, b: null, c: 3 }

このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。

次のパイプラインでは、$mergeObjects $replaceWithimdbtomatoes.criticratingsのrating を使用して、各映画の$mergeObjects サブドキュメントとimdb サブドキュメントを単一のtomatoes.critic ドキュメントにマージします。どちらのサブドキュメントにも フィールドが含まれているため、 は 評価を 評価で上書きします。各サブドキュメントからの一意のフィールドは結果に保持されます。

db.movies.aggregate( [
{
$match: {
genres: "Action",
year: 2010,
"imdb.rating": { $exists: true },
"tomatoes.critic.rating": { $exists: true }
}
},
{ $sort: { title: 1 } },
{ $limit: 5 },
{
$replaceWith: {
title: "$title",
year: "$year",
ratings: { $mergeObjects: [ "$imdb", "$tomatoes.critic" ] }
}
}
] )

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

  • は、既存の$match と を持つ2010imdb.rating tomatoes.critic.ratingのアクション映画にフィルタリングします。

  • $sorttitleはドキュメントを でアルファベット順にソートします。

  • $limit は、読みやすくするために出力を 5 ドキュメントに制限します。

  • $replaceWith$mergeObjects$imdb$tomatoes.criticは を使用して と をratings フィールドにマージします。

    • 両方のサブドキュメントには ratingフィールドが含まれているため、$mergeObjects は tomatoes.critic(最後の引数)の値を使用します。

    • imdb からの一意のフィールド votes と id、および tomatoes.critic からの numReviews と meter はすべて保持されます。

このページを評価