Стартиране на Mongo 4.2
, новият $merge
оператор за агрегиране (подобен на $out
) позволява обединяване резултатът от конвейер за агрегиране в указаната колекция:
При този вход:
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
етапът на агрегиране може да се използва като такъв:
db.source.aggregate([
// { $whatever aggregation stage, for this example, we just keep records as is }
{ $merge: { into: "target" } }
])
за производство:
// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }
Имайте предвид, че $merge
оператор идва с много опции
за да укажете как да обедините вмъкнати записи, които са в конфликт със съществуващи записи.
В този случай (с опциите по подразбиране), това:
-
запазва съществуващите документи на целевата колекция (това е случаят с
{ "_id": "id_2", "a": 54 }
) -
вмъква документи от изхода на тръбопровода за агрегиране в целевата колекция, когато те вече не присъстват (на базата на
_id
- това е случаят с{ "_id" : "id_3", "a" : 38 }
) -
замества записите на целевата колекция, когато тръбопроводът за агрегиране произвежда документи, съществуващи в целевата колекция (на базата на
_id
- това е случаят с{ "_id": "id_1", "a": 12 }
заменено с{ "_id" : "id_1", "a" : 34 }
)