เริ่มต้นด้วย MongoDB 2.4 ไม่จำเป็นต้องพึ่งพาดัชนีที่ไม่ซ้ำกันอีกต่อไป (หรือวิธีแก้ปัญหาอื่น ๆ ) สำหรับfindOrCreate
การดำเนินการแบบปรมาณู
ขอขอบคุณผู้ประกอบการใหม่ 2.4 ซึ่งจะช่วยให้คุณสามารถระบุการปรับปรุงเท่านั้นที่ควรจะเกิดขึ้นเมื่อใส่เอกสาร$setOnInsert
เมื่อรวมกับupsert
ตัวเลือกนี้หมายความว่าคุณสามารถใช้findAndModify
เพื่อให้บรรลุการfindOrCreate
ดำเนินการที่เหมือนอะตอมได้
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
})
เนื่องจาก$setOnInsert
มีผลเฉพาะกับเอกสารที่กำลังแทรกหากพบเอกสารที่มีอยู่จะไม่มีการแก้ไขใด ๆ หากไม่มีเอกสารอยู่เอกสารจะเพิ่มขึ้นหนึ่งรายการด้วย _id ที่ระบุจากนั้นดำเนินการชุดแทรกเท่านั้น ในทั้งสองกรณีเอกสารจะถูกส่งคืน
collection.findAndModify({_id:'theId'}, <your sort opts>, {$setOnInsert:{foo: 'bar'}}, {new:true, upsert:true}, callback)
นั้น ดูเอกสาร