2015-12-13 14 views
5

Có thể cập nhật/loại bỏ nguyên tử hai tài liệu trong MongoDB bằng cách gọi một cập nhật/xóa cuộc gọi mới từ trong cuộc gọi lại của bản cập nhật đầu tiên không? Trong trường hợp bên dưới, tôi muốn xóa tài liệu thứ hai khỏi bộ sưu tập, nhưng chỉ khi bản cập nhật cho tài liệu đầu tiên thành công:Trong cuộc gọi MongoDB lồng nhau, làm cách nào để đảm bảo nguyên tử?

db.collection.update(conditions1, {$set: set}, function (err,result){ 
    db.collection.remove(conditions2, function(err,doc_num){  
     db.close(); 
    )}; 
}); 

Tôi đang truy cập toán tử truy vấn $ cô lập, nhưng từ những gì tôi hiểu trong tài liệu, toán tử này được sử dụng để thực hiện khóa đọc/ghi trên một truy vấn đơn lẻ ảnh hưởng đến nhiều tài liệu, chứ không phải thực hiện khóa đọc/ghi trên một tài liệu sau khi thực hiện cập nhật trên tài liệu khác thông qua cuộc gọi lại cập nhật tài liệu đầu tiên là những gì tôi muốn thử và hoàn thành.

Trả lời

0

Không, điều đó là không thể. Theo tài liệu here, khóa sẽ được lưu trữ trên một truy vấn duy nhất chứ không phải toàn bộ giao dịch.

Bạn có thể khắc phục vấn đề nguyên tử bằng cách sử dụng this.

0

Như Amir đã nói, không thể, nhưng bạn có thể bắt chước hành vi ở mongo bằng cách theo dõi two phase commit pattern. Liên kết đó cũng liên kết đến cách thực hiện các hoạt động giống như cuộn ngược.

Các vấn đề liên quan