Startar Mongo 4.2
, den nya $merge
aggregeringsoperator (liknande $out
) tillåter sammanslagning resultatet av en aggregeringspipeline till den angivna samlingen:
Med tanke på denna 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
aggregeringsstadiet kan användas som sådant:
db.source.aggregate([
// { $whatever aggregation stage, for this example, we just keep records as is }
{ $merge: { into: "target" } }
])
att producera:
// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }
Observera att $merge
operatör kommer med många alternativ
för att ange hur man slår samman infogade poster som är i konflikt med befintliga poster.
I det här fallet (med standardalternativen), detta:
-
behåller målsamlingens befintliga dokument (detta är fallet med
{ "_id": "id_2", "a": 54 }
) -
infogar dokument från utdata från aggregeringspipelinen i målsamlingen när de inte redan finns (baserat på
_id
- detta är fallet med{ "_id" : "id_3", "a" : 38 }
) -
ersätter målsamlingens poster när aggregeringspipelinen producerar dokument som finns i målsamlingen (baserat på
_id
- detta är fallet med{ "_id": "id_1", "a": 12 }
ersatt av{ "_id" : "id_1", "a" : 34 }
)