Vanaf Mongo 4.2
, de nieuwe $merge
aggregatie-operator (vergelijkbaar met $out
) staat samenvoegen toe het resultaat van een aggregatiepijplijn in de opgegeven verzameling:
Gezien deze invoer:
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 }
])
de $merge
aggregatiefase kan als zodanig worden gebruikt:
db.source.aggregate([
// { $whatever aggregation stage, for this example, we just keep records as is }
{ $merge: { into: "target" } }
])
produceren:
// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }
Merk op dat de $merge
operator wordt geleverd met veel opties
om te specificeren hoe ingevoegde records moeten worden samengevoegd die conflicteren met bestaande records.
In dit geval (met de standaard opties), dit:
-
behoudt de bestaande documenten van de doelverzameling (dit is het geval van
{ "_id": "id_2", "a": 54 }
) -
voegt documenten uit de uitvoer van de aggregatiepijplijn in de doelverzameling in wanneer ze nog niet aanwezig zijn (op basis van de
_id
- dit is het geval voor{ "_id" : "id_3", "a" : 38 }
) -
vervangt de records van de doelverzameling wanneer de aggregatiepijplijn documenten produceert die in de doelverzameling aanwezig zijn (op basis van de
_id
- dit is het geval voor{ "_id": "id_1", "a": 12 }
vervangen door{ "_id" : "id_1", "a" : 34 }
)