Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

การ Insert ข้อมูลใน MongoDB โดยไม่ให้ซ้ำด้วย Unique Index

ป้องกันข้อมูลซ้ำใน MongoDB ด้วย Unique Index และ Upsert

บทความนี้สาธิตวิธีการ Insert ข้อมูลโดยป้องกันไม่ให้มีค่าซ้ำในฟิลด์เฉพาะ โดยการสร้าง Unique Index แล้วใช้ insert() พร้อม upsert: true

ขั้นตอนที่ 1: สร้าง Unique Index บน StudentFirstName

> db.insertWithoutDuplicateDemo.createIndex({"StudentFirstName": 1}, { unique: true });
{ "createdCollectionAutomatically": true, "numIndexesBefore": 1, "numIndexesAfter": 2, "ok": 1 }

ขั้นตอนที่ 2: Insert พร้อม upsert: true

upsert: true หมายถึง: ถ้ามีอยู่แล้ว (Match) -> Update (แต่ที่นี่ไม่มี $set จึงไม่เปลี่ยนอะไร), ถ้าไม่มี -> Insert ใหม่
พร้อม Unique Index จะเกิด Error (E11000) ถ้าพยายาม Insert ค่าซ้ำ

> db.insertWithoutDuplicateDemo.insert({"StudentFirstName":"Chris"},{ upsert: true });
WriteResult({ "nInserted": 1 })
> db.insertWithoutDuplicateDemo.insert({"StudentFirstName":"David"},{ upsert: true });
WriteResult({ "nInserted": 1 })
> db.insertWithoutDuplicateDemo.insert({"StudentFirstName":"Chris"},{ upsert: true });
WriteResult({ "nInserted": 0, "writeError": { "code": 11000, "errmsg": "E11000 duplicate key error..." } })
> db.insertWithoutDuplicateDemo.insert({"StudentFirstName":"Bob"},{ upsert: true });
WriteResult({ "nInserted": 1 })

ขั้นตอนที่ 3: ตรวจสอบข้อมูลสุดท้าย

> db.insertWithoutDuplicateDemo.find().pretty();

ผลลัพธ์: มีแค่ Chris, David, Bob (Chris ครั้งที่ 2 ถูกบล็อค)

{ "_id": ObjectId("5e064405150ee0e76c06a054"), "StudentFirstName": "Chris" }
{ "_id": ObjectId("5e064410150ee0e76c06a055"), "StudentFirstName": "David" }
{ "_id": ObjectId("5e06441f150ee0e76c06a057"), "StudentFirstName": "Bob" }

สรุป: การสร้าง Unique Index ({unique: true}) เป็นวิธีมาตรฐานและมีประสิทธิภาพที่สุดในการป้องกันข้อมูลซ้ำที่ระดับ Database ร่วมกับ upsert สำหรับ Logic "Insert if not exists"