Khởi động Mongo 4.2
, $merge
mới
toán tử tổng hợp (tương tự như $out
) cho phép hợp nhất kết quả của một đường dẫn tổng hợp vào bộ sưu tập được chỉ định:
Với đầu vào này:
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
giai đoạn tổng hợp có thể được sử dụng như:
db.source.aggregate([
// { $whatever aggregation stage, for this example, we just keep records as is }
{ $merge: { into: "target" } }
])
để sản xuất:
// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }
Lưu ý rằng $merge
toán tử đi kèm với nhiều tùy chọn
để chỉ định cách hợp nhất các bản ghi đã chèn xung đột với các bản ghi hiện có.
Trong trường hợp này (với các tùy chọn mặc định), đây là:
-
giữ các tài liệu hiện có của bộ sưu tập đích (đây là trường hợp của
{ "_id": "id_2", "a": 54 }
) -
chèn tài liệu từ đầu ra của đường ống tổng hợp vào tập hợp đích khi chúng chưa có mặt (dựa trên
_id
- đây là trường hợp của{ "_id" : "id_3", "a" : 38 }
) -
thay thế các bản ghi của tập hợp đích khi đường ống tổng hợp tạo ra các tài liệu hiện có trong tập hợp đích (dựa trên
_id
- đây là trường hợp của{ "_id": "id_1", "a": 12 }
được thay thế bởi{ "_id" : "id_1", "a" : 34 }
)