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

MongoDB: ป้องกันการเพิ่มข้อมูลซ้ำด้วย Unique Index

ใช้ createIndex() (แทน ensureIndex() ที่ deprecated) พร้อมตัวเลือก unique: true เพื่อป้องกันการเพิ่มข้อมูลซ้ำในฟิลด์ที่กำหนด สร้างดัชนี unique บนฟิลด์ SubjectName:

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

ลองเพิ่มข้อมูล:

> db.demo316.insertOne({"SubjectName":"MySQL"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50e378f8647eb59e56205d") }
> db.demo316.insertOne({"SubjectName":"MongoDB"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50e37df8647eb59e56205e") }
> db.demo316.insertOne({"SubjectName":"MongoDB"});

ครั้งที่ 3 จะเกิดข้อผิดพลาด duplicate key:

WriteError: E11000 duplicate key error collection: test.demo316 index: SubjectName_1 dup key: { : "MongoDB" }

แสดงข้อมูลที่บันทึกสำเร็จ:

> db.demo316.find();

ผลลัพธ์:

{ "_id" : ObjectId("5e50e378f8647eb59e56205d"), "SubjectName" : "MySQL" }
{ "_id" : ObjectId("5e50e37df8647eb59e56205e"), "SubjectName" : "MongoDB" }

ข้อมูลเพิ่มเติม

  • createIndex() แทน ensureIndex() (deprecated ตั้งแต่ MongoDB 3.0)
  • Unique index ทำงานทั้ง insert และ update
  • สามารถสร้าง compound unique index ได้ เช่น { "field1": 1, "field2": 1 }
  • ใช้ db.collection.dropIndex("SubjectName_1") เพื่อลบดัชนี