Mongo 4.2
を開始 、新しい $merge
集計演算子($out
と同様) )マージを許可します 指定されたコレクションへの集約パイプラインの結果:
この入力が与えられた場合:
db.source.insert([
{ "_id": "id_1", "a": 34 },
{ "_id": "id_3", "a": 38 },
{ "_id": "id_4", "a": 54 }
])
db.target.insert([
{ "_id": "id_1", "a": 12 },
{ "_id": "id_2", "a": 54 }
])
$merge
集約ステージは次のように使用できます:
db.source.aggregate([
// { $whatever aggregation stage, for this example, we just keep records as is }
{ $merge: { into: "target" } }
])
作成するには:
// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }
$merge
に注意してください オペレーターには、多くのオプション
が付属しています。 挿入されたレコードを既存のレコードと競合するようにマージする方法を指定します。
この場合(デフォルトのオプションを使用)、これは次のとおりです。
-
ターゲットコレクションの既存のドキュメントを保持します(これは、
{ "_id": "id_2", "a": 54 }
の場合です。 ) -
ドキュメントがまだ存在しない場合は、集計パイプラインの出力からターゲットコレクションにドキュメントを挿入します(
_id
に基づく) -これは{ "_id" : "id_3", "a" : 38 }
の場合です。 ) -
集約パイプラインが(
_id
に基づいて)ターゲットコレクションに存在するドキュメントを生成するときに、ターゲットコレクションのレコードを置き換えます -これは{ "_id": "id_1", "a": 12 }
の場合です。{ "_id" : "id_1", "a" : 34 }
に置き換えられました )