Tôi sẽ đi vào vấn đề này với cảnh báo chung rằng tôi thừa nhận rằng tôi thậm chí chưa xem xét kết quả, nhưng các nguyên tắc cơ bản dường như có giá trị đối với tôi ngay từ đầu.
Những gì bạn cần xem xét ở đây là "những gì đang thực sự diễn ra bên dưới" của "đường cú pháp tốt đẹp" mà bạn được trình bày trong các cuộc gọi chung. Điều này có nghĩa là về cơ bản là xem "biểu mẫu lệnh" của các hoạt động bạn đang gọi thực sự làm gì. Trong trường hợp này, "update" .
Vì vậy, nếu bạn đã xem qua liên kết đó, thì hãy xem xét "Hàng loạt " cập nhật biểu mẫu:
var bulk = db.collection.initializeOrdedBulkOp();
bulk.find({ "_id": 1 }).updateOne({ "$set": { "a": 1 } });
bulk.find({ "_id": 2 }).updateOne({ "$set": { "b": 2 } });
bulk.execute();
Bây giờ bạn đã biết điều này đang được gửi đến máy chủ dưới dạng một yêu cầu, nhưng những gì bạn có thể không xem xét là "yêu cầu" thực tế được thực hiện "ẩn" thực sự là thế này:
db.runCommand({
"update": "collection",
"updates": [
{ "q": { "_id": 1 }, "u": { "$set": { "a": 1 } } },
{ "q": { "_id": 2 }, "u": { "$set": { "b": 2 } } }
],
"ordered": true
})
Do đó, có lý do rằng những gì bạn thực sự thấy trong nhật ký trong thao tác "cập nhật" thực sự giống như (viết tắt từ đầu ra đầy đủ thành chỉ truy vấn):
{ "q": { "_id": 1 }, "u": { "$set": { "a": 1 } } }
{ "q": { "_id": 2 }, "u": { "$set": { "b": 2 } } }
Do đó, điều đó có nghĩa là mỗi hành động trong số đó với lệnh được liên kết đều nằm trong oplog để "phát lại" khi sao chép và / hoặc trên các hành động khác mà bạn có thể thực hiện, chẳng hạn như "phát lại" các mục oplog cụ thể.
Tôi chắc chắn rằng đó là những gì thực sự xảy ra mà không cần nhìn, bởi vì tôi biết rằng đó là cách trình điều khiển triển khai các cuộc gọi thực tế và điều đó có nghĩa là mỗi cuộc gọi được giữ trong oplog theo cách này.
Do đó "như một toàn thể", sau đó không. Đây không phải là "giao dịch" và luôn là các hoạt động riêng biệt ngay cả khi việc gửi và trả lại của chúng nằm trong một yêu cầu đơn lẻ. Nhưng chúng không một hoạt động đơn lẻ, và do đó sẽ không và không nên được ghi lại như vậy.