कम्पाउंड यूनिक इंडेक्स के साथ डुप्लिकेट रोकना
एकाधिक फील्ड्स के डुप्लिकेट रोकने के लिए, ensureIndex() का उपयोग करें और unique: true सेट करें।
कलेक्शन और इंडेक्स बनाना
> db.demo272.ensureIndex({"FirstName":1,"Subject":1},{unique:true});
{ "createdCollectionAutomatically": true, "numIndexesBefore": 1, "numIndexesAfter": 2, "ok": 1 }
डॉक्यूमेंट्स इन्सर्ट करना
> db.demo272.insertOne({"FirstName":"Chris","Subject":"MySQL"});
{ "acknowledged": true, "insertedId": ObjectId("5e48232a1627c0c63e7dbabf") }
> db.demo272.insertOne({"FirstName":"Chris","Subject":"MongoDB"});
{ "acknowledged": true, "insertedId": ObjectId("5e48232f1627c0c63e7dbac0") }
> db.demo272.insertOne({"FirstName":"David","Subject":"MySQL"});
{ "acknowledged": true, "insertedId": ObjectId("5e48233a1627c0c63e7dbac1") }
> db.demo272.insertOne({"FirstName":"Chris","Subject":"MySQL"});
2020-02-15T22:28:55.137+0530 E QUERY [js] WriteError: E11000 duplicate key error collection: test.demo272 index: FirstName_1_Subject_1 dup key: { : "Chris", : "MySQL" }
परिणाम देखना
> db.demo272.find();
आउटपुट (डुप्लिकेट अस्वीकृत):
{ "_id": ObjectId("5e48232a1627c0c63e7dbabf"), "FirstName": "Chris", "Subject": "MySQL" }
{ "_id": ObjectId("5e48232f1627c0c63e7dbac0"), "FirstName": "Chris", "Subject": "MongoDB" }
{ "_id": ObjectId("5e48233a1627c0c63e7dbac1"), "FirstName": "David", "Subject": "MySQL" }
मुख्य बिंदु
- कम्पाउंड इंडेक्स: {"FirstName":1,"Subject":1} दोनों फील्ड्स के संयोजन पर यूनिकनेस लागू करता है
- unique: true: डुप्लिकेट संयोजनों को रोकता है
- E11000 एरर: डुप्लिकेट कुंजी होने पर फेंका जाता है
- Chris-MySQL संयोजन दोबारा इन्सर्ट करने पर एरर आया
नोट: आधुनिक MongoDB संस्करणों में createIndex() का उपयोग करने की सलाह दी जाती है।