Atomically tìm, cập nhật và trả về document
findOneAndUpdate() thực hiện tìm kiếm, cập nhật và trả về document trong một operation atomic, tránh race condition.
Dữ liệu điểm số
> db.demo349.insertOne({"Name": "Chris", "Marks": 56});
> db.demo349.insertOne({"Name": "David", "Marks": 78});
> db.demo349.insertOne({"Name": "Chris", "Marks": 89});
> db.demo349.insertOne({"Name": "David", "Marks": 54});
Tăng Marks 10 cho David đầu tiên
> db.demo349.findOneAndUpdate(
{ "Name": "David" },
{ $inc: { Marks: 10 } }
);
Kết quả trả về (document TRƯỚC khi cập nhật)
{ "_id": ObjectId("..."), "Name": "David", "Marks": 78 }
Kiểm tra sau cập nhật
> db.demo349.find();
{ "_id": ..., "Name": "Chris", "Marks": 56 }
{ "_id": ..., "Name": "David", "Marks": 88 } <-- Đã cập nhật
{ "_id": ..., "Name": "Chris", "Marks": 89 }
{ "_id": ..., "Name": "David", "Marks": 54 }
Options quan trọng:
returnDocument: "after": Trả về document SAU cập nhậtsort: { _id: 1 }: Xác định document nào được cập nhật khi nhiều doc khớpupsert: true: Tạo mới nếu không tìm thấy