定義
ドキュメントの配列を単一のドキュメントにマージします。
注意
曖昧さ回避
このページでは、ドキュメントの配列をマージする式として使用される場合の$mergeObjects について説明します。
また、入力ドキュメントのグループにまたがるマージされたドキュメントを返す$mergeObjects (accumulator) を使用することもできます。
構文
式として使用する場合、$mergeObjects は次の構文をとります。
{ $mergeObjects: <expression> }
<expression> オペランドは次のいずれかになります。
マージするドキュメントの配列として評価される単一の式。例、
$blogPostsはドキュメントフィールドblogPostsにドキュメントの配列が含まれています。式の配列。それぞれがドキュメントとして評価されます。例、
[ "$doc1", "$doc2", "$doc3" ]では、各ドキュメントフィールドに 1 つのドキュメントが含まれます。
動作
$mergeObjects は null 入力値を無視します。すべての入力値が null の場合、$mergeObjects は空のドキュメント{ } を返します。
$mergeObjects は、ドキュメントをマージするときにフィールド値を上書きします。複数の入力ドキュメントが同じフィールド名を含む場合、出力には、競合するフィールドを含む最後の入力ドキュメントの値が含まれます。
例 | 結果 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| | ||||||||
| | ||||||||
| | ||||||||
| |
例
このページの例では、 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.ratingtomatoes.critic.ratingのアクション映画にフィルタリングします。$sorttitleはドキュメントを でアルファベット順にソートします。$limitは、読みやすくするために出力を 5 ドキュメントに制限します。$replaceWith$mergeObjects$imdb$tomatoes.criticは を使用して と をratingsフィールドにマージします。両方のサブドキュメントには
ratingフィールドが含まれているため、$mergeObjectsはtomatoes.critic(最後の引数)の値を使用します。imdbからの一意のフィールドvotesとid、およびtomatoes.criticからのnumReviewsとmeterはすべて保持されます。