MongoDB में डायनामिक फील्ड नामों वाले सबडॉक्यूमेंट्स के लिए इंडेक्सिंग
हां, आप इसे "properties.k" के लिए कुंजी और "properties.v" के लिए मान इंडेक्स करके प्राप्त कर सकते हैं। यही ensureIndex() में लागू किया जाता है।
उदाहरण कलेक्शन बनाना
> db.demo274.insertOne({"details":[
{StudentFirstName:"Chris",StudentLastName:"Brown"},
{StudentFirstName:"David",StudentLastName:"Miller"},
{StudentFirstName:"John",StudentLastName:"Smith"},
{StudentFirstName:"John",StudentLastName:"Doe"}
]});
{ "acknowledged": true, "insertedId": ObjectId("5e48de35dd099650a5401a42") }
सभी डॉक्यूमेंट्स
> db.demo274.find().pretty();
सबडॉक्यूमेंट फील्ड्स पर इंडेक्स बनाना
> db.demo274.ensureIndex({"details.StudentFirstName": 1, "details.StudentLastName": 1});परिणाम
व्याख्या
- डॉट नोटेशन इंडेक्स: {"details.StudentFirstName": 1, "details.StudentLastName": 1}
- यह इंडेक्स details ऐरे के प्रत्येक तत्व के StudentFirstName और StudentLastName के लिए एंट्री बनाता है
- मल्टी-की इंडेक्स: ऐरे फील्ड पर इंडेक्स स्वचालित रूप से मल्टी-की बन जाता है
- क्वेरी जैसे
db.demo274.find({"details.StudentFirstName": "John"})इस इंडेक्स का उपयोग करेगी
डायनामिक/अज्ञात फील्ड नामों के लिए
यदि फील्ड नाम पहले से ज्ञात नहीं हैं (डायनामिक स्कीमा), तो "एट्रिब्यूट पैटर्न" का उपयोग करें:
यह पैटर्न स्कीमा-लेस डायनामिक एट्रिब्यूट्स के लिए कुशल इंडेक्सिंग सक्षम करता है।