Starter Mongo 4.2
, den nye $merge
aggregeringsoperator (svarende til $out
) tillader sammenfletning resultatet af en aggregeringspipeline til den angivne samling:
Givet dette input:
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
aggregeringstrin kan bruges som sådan:
db.source.aggregate([
// { $whatever aggregation stage, for this example, we just keep records as is }
{ $merge: { into: "target" } }
])
at producere:
// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }
Bemærk, at $merge
operatør kommer med mange muligheder
for at angive, hvordan indsatte poster, der er i konflikt med eksisterende poster, flettes.
I dette tilfælde (med standardindstillingerne), dette:
-
beholder målsamlingens eksisterende dokumenter (dette er tilfældet med
{ "_id": "id_2", "a": 54 }
) -
indsætter dokumenter fra outputtet af aggregeringspipelinen i målsamlingen, når de ikke allerede er til stede (baseret på
_id
- dette er tilfældet for{ "_id" : "id_3", "a" : 38 }
) -
erstatter målsamlingens poster, når aggregeringspipelinen producerer dokumenter, der findes i målsamlingen (baseret på
_id
- dette er tilfældet for{ "_id": "id_1", "a": 12 }
erstattet af{ "_id" : "id_1", "a" : 34 }
)