Bắt đầu với MongoDB 2.4, không còn cần thiết phải dựa vào chỉ mục duy nhất (hoặc bất kỳ giải pháp thay thế nào khác) cho findOrCreate
nguyên tử như hoạt động.
Điều này là nhờ vào $setOnInsert
toán tử mới cho 2.4, cho phép bạn chỉ định các cập nhật chỉ xảy ra khi chèn tài liệu.
Điều này, kết hợp với upsert
, nghĩa là bạn có thể sử dụng findAndModify
để đạt được findOrCreate
nguyên tử -như hoạt động.
db.collection.findAndModify({
query: { _id: "some potentially existing id" },
update: {
$setOnInsert: { foo: "bar" }
},
new: true, // return new doc if one is upserted
upsert: true // insert the document if it does not exist
})
Dưới dạng $setOnInsert
chỉ ảnh hưởng đến tài liệu được chèn vào, nếu tài liệu hiện có được tìm thấy, sẽ không có sửa đổi nào xảy ra. Nếu không có tài liệu nào tồn tại, nó sẽ bổ sung một tài liệu với _id được chỉ định, sau đó thực hiện bộ chỉ chèn. Trong cả hai trường hợp, tài liệu được trả lại.