आपको यहाँ जो समझ में नहीं आ रहा है वह यह है कि $exists
किसी भी तरह से एक इंडेक्स को "हड़प" नहीं सकता, यहां तक कि विरल भी। जैसा कि दस्तावेज़ीकरण स्वयं कहता है:
उन पृष्ठों में दिया गया उदाहरण एक { "$exists": false }
. है सवाल। लेकिन यहां विपरीत तार्किक स्थिति से कोई फर्क नहीं पड़ता।
एक "विरल" सूचकांक का "पूर्ण लाभ" प्राप्त करने के लिए आपको उसके पास मौजूद डेटा के "प्रकार" पर विचार करने और उचित रूप से क्वेरी करने की आवश्यकता है।
संख्यात्मक के लिए, कुछ इस तरह:
db.collection.find({ "a": "foobar", "b": { "$gte": -9999, "$lte": 9999 } })
जो एक इंडेक्स और स्पैस का उपयोग करता है। या टेक्स्ट आधारित के लिए:
db.collection.find({ "a": "foobar", "b": /.+/ })
जो विरल अनुक्रमणिका का भी उपयोग करेगा और केवल उन्हीं को देखेगा जहाँ "b" परिभाषित किया गया था।
"सरणी" के लिए फिर "सावधान रहें"। जैसा कि देखा जा रहा मूल्य शायद उपरोक्त में से एक है जब तक कि आपने ऐसा नहीं किया:
db.collection.insert({ "a": 1, "b": [[]] })
तो यह कहाँ ठीक है:
db.ab.find({ "a": 1, "b": { "$type": 4 } })
लेकिन वास्तव में उन्हीं कारणों से "विरल" अनुक्रमणिका का उपयोग नहीं किया जा रहा है $exists
यहां काम नहीं करेगा।
इसलिए आपको यह समझने की आवश्यकता है कि यहां शब्दों का क्या अर्थ है, और यदि आप अधिकतम प्रदर्शन की अपेक्षा करते हैं तो आपके द्वारा बनाई गई अनुक्रमणिका परिभाषाओं का उपयोग करने के लिए "उचित रूप से क्वेरी करें"।
ये स्पष्ट उदाहरण हैं जिन्हें आप स्वयं परख सकते हैं और देख सकते हैं कि परिणाम सत्य हैं। मेरी इच्छा है कि इन बिंदुओं पर मूल दस्तावेज स्पष्ट थे, लेकिन मुझे यह भी पता है कि कई लोगों ने योगदान देने की कोशिश की है (और उत्कृष्ट व्याख्याएं दी हैं) लेकिन इनमें से कोई भी आज तक शामिल नहीं किया गया है।
मान लीजिए कि आप यहाँ क्यों पूछ रहे हैं।