Spouští se Mongo 4.2
, nový $merge
agregační operátor (podobný $out
) umožňuje slučování výsledek agregačního kanálu do zadané kolekce:
Vzhledem k tomuto vstupu:
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
agregační fázi lze použít jako takovou:
db.source.aggregate([
// { $whatever aggregation stage, for this example, we just keep records as is }
{ $merge: { into: "target" } }
])
vyrobit:
// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }
Všimněte si, že $merge
operátor přichází s mnoho možností
určit, jak sloučit vložené záznamy kolidující s existujícími záznamy.
V tomto případě (s výchozími možnostmi) toto:
-
uchovává stávající dokumenty cílové kolekce (toto je případ
{ "_id": "id_2", "a": 54 }
) -
vloží dokumenty z výstupu agregačního kanálu do cílové kolekce, pokud ještě nejsou přítomny (na základě
_id
- toto je případ{ "_id" : "id_3", "a" : 38 }
) -
nahradí záznamy cílové kolekce, když agregační kanál vytvoří dokumenty existující v cílové kolekci (na základě
_id
- toto je případ{ "_id": "id_1", "a": 12 }
nahrazeno{ "_id" : "id_1", "a" : 34 }
)