Memulai Mongo 4.2
, $merge
baru
operator agregasi (mirip dengan $out
) memungkinkan penggabungan hasil dari pipa agregasi ke dalam koleksi yang ditentukan:
Dengan masukan ini:
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
tahap agregasi dapat digunakan sebagai berikut:
db.source.aggregate([
// { $whatever aggregation stage, for this example, we just keep records as is }
{ $merge: { into: "target" } }
])
untuk menghasilkan:
// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }
Perhatikan bahwa $merge
operator hadir dengan banyak opsi
untuk menentukan cara menggabungkan catatan yang disisipkan yang bertentangan dengan catatan yang ada.
Dalam hal ini (dengan opsi default), ini:
-
menyimpan dokumen koleksi target yang ada (ini adalah kasus
{ "_id": "id_2", "a": 54 }
) -
menyisipkan dokumen dari output pipa agregasi ke dalam koleksi target saat dokumen tersebut belum ada (berdasarkan
_id
- ini adalah kasus{ "_id" : "id_3", "a" : 38 }
) -
menggantikan catatan koleksi target ketika pipa agregasi menghasilkan dokumen yang ada di koleksi target (berdasarkan
_id
- ini adalah kasus{ "_id": "id_1", "a": 12 }
diganti dengan{ "_id" : "id_1", "a" : 34 }
)