Cập nhật bằng upsert=true
có thể được sử dụng để thực hiện "chèn hoặc cập nhật" nguyên tử ( http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag
).
Ví dụ:nếu chúng ta muốn đảm bảo một tài liệu trong bộ sưu tập Front có url
cụ thể được chèn chính xác một lần, chúng tôi có thể chạy một cái gì đó như:
db.Front.update(
{url: 'http://example.com'},
{$set: {
url: 'http://example.com'},
found: true
}
)
Các thao tác trên một tài liệu trong MongoDB luôn là nguyên tử. Nếu bạn thực hiện các bản cập nhật trải dài trên nhiều tài liệu, thì không có tính nguyên tử nào được đảm bảo. Trong những trường hợp như vậy, bạn có thể tự hỏi:tôi có thực sự cần các phép toán để trở thành nguyên tử không? Nếu câu trả lời là không, thì bạn có thể sẽ tìm ra cách làm việc với dữ liệu có khả năng không nhất quán. Nếu câu trả lời là có và bạn muốn gắn bó với MongoDB, hãy xem mẫu thiết kế trên Cam kết hai giai đoạn .