การสร้างดัชนีแบบ Unique เพื่อป้องกันข้อมูลซ้ำ
เพื่อป้องกันไม่ให้มีการแทรกข้อมูลซ้ำ ให้ตั้งค่า unique: true พร้อมกับตัวเลือก dropDups: true ตามรูปแบบด้านล่าง:
db.yourCollectionName.ensureIndex({yourFieldName: 1}, {unique: true, dropDups: true})
ตัวอย่างการใช้งาน
สร้างคอลเลกชันพร้อมเอกสารทดสอบ การแทรกข้อมูลซ้ำจะถูกปฏิเสธ:
> db.demo604.ensureIndex({FirstName: 1}, {unique: true, dropDups: true});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> db.demo604.insertOne({FirstName:"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e960887ed011c280a0905d8") }
> db.demo604.insertOne({FirstName:"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e96088aed011c280a0905d9") }
> db.demo604.insertOne({FirstName:"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e96088ded011c280a0905da") }
> db.demo604.insertOne({FirstName:"Chris"});
2020-04-15T00:31:35.978+0530 E QUERY [js] WriteError: E11000 duplicate key error collection: test.demo604 index: FirstName_1 dup key: { : "Chris" }
แสดงเอกสารทั้งหมดในคอลเลกชัน
ใช้เมธอด find() เพื่อดูข้อมูลที่เหลืออยู่:
> db.demo604.find();
ผลลัพธ์ที่ได้:
{ "_id" : ObjectId("5e960887ed011c280a0905d8"), "FirstName" : "Chris" }
{ "_id" : ObjectId("5e96088aed011c280a0905d9"), "FirstName" : "Bob" }
{ "_id" : ObjectId("5e96088ded011c280a0905da"), "FirstName" : "David" }