MongoDB में यूनिक इंडेक्स का उपयोग करके सरणी फ़ील्ड में डुप्लिकेट मान रोकना
MongoDB में ensureIndex() (अब createIndex()) के साथ unique: true विकल्प का उपयोग करके सरणी फ़ील्ड में डुप्लिकेट मानों को रोका जा सकता है।
नमूना डेटा और इंडेक्स बनाना
> db.demo298.save({Name: 'Chris', Marks: [46, 79] });
WriteResult({ "nInserted" : 1 })
> db.demo298.save({Name: 'David', Marks: [67, 88] });
WriteResult({ "nInserted" : 1 })
> db.demo298.ensureIndex({ Marks: 1 }, {unique: 1});
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> db.demo298.save({Name: 'Mike', Marks: [88,98] });
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: test.demo298 index: Marks_1 dup key: { : 88.0 }"
}
})
सभी दस्तावेज़ प्रदर्शित करना
> db.demo298.find();
आउटपुट:
{ "_id" : ObjectId("5e4d56e55d93261e4bc9ea48"), "Name" : "Chris", "Marks" : [ 46, 79 ] }
{ "_id" : ObjectId("5e4d56f55d93261e4bc9ea49"), "Name" : "David", "Marks" : [ 67, 88 ] }
व्याख्या
ensureIndex({ Marks: 1 }, {unique: 1})-Marksफ़ील्ड पर आरोही (1) यूनिक इंडेक्स बनाता है।- चूंकि
Marksएक सरणी है, MongoDB सरणी के **प्रत्येक तत्व** को इंडेक्स करता है (मल्टीकी इंडेक्स)। - तीसरा दस्तावेज़
{Name: 'Mike', Marks: [88,98]}डालने पर त्रुटि होती है क्योंकि88पहले से मौजूद है (David के Marks में)। - त्रुटि कोड
11000डुप्लिकेट की त्रुटि दर्शाता है।
महत्वपूर्ण विचार
- सरणी फ़ील्ड पर यूनिक इंडेक्स का अर्थ है कि **कोई भी दो दस्तावेज़ सरणी में समान मान साझा नहीं कर सकते**।
- एक ही दस्तावेज़ की सरणी में डुप्लिकेट मान अनुमत हैं (जब तक वे अन्य दस्तावेज़ों में मौजूद नहीं हैं)।
- MongoDB 3.0+ में
createIndex()का उपयोग करें,ensureIndex()पदावनत है।
यह तकनीक उन स्थितियों के लिए उपयोगी है जहां सरणी मान वैश्विक रूप से अद्वितीय होने चाहिए, जैसे टैग, श्रेणियां, या अद्वितीय पहचानकर्ता।