आपकी क्वेरी में शर्तों का क्रम इस बात को प्रभावित नहीं करता है कि वह किसी इंडेक्स का उपयोग कर सकता है या नहीं।
उदाहरण के लिए विशिष्ट दस्तावेज़ संरचना:
{
"FieldA" : "A",
"FieldB" : "B"
}
यदि आपके पास ए और बी पर एक कंपाउंड इंडेक्स है:
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
तब निम्नलिखित दोनों प्रश्न उस अनुक्रमणिका का उपयोग करने में सक्षम होंगे:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
तो क्वेरी में शर्तों का क्रम इंडेक्स का उपयोग करने से नहीं रोकता है - जो मुझे लगता है कि आप जो सवाल पूछ रहे हैं।
आप शेल में 2 प्रश्नों को आज़माकर और .explain()
. जोड़कर आसानी से इसका परीक्षण कर सकते हैं खोज के बाद। मैंने यह सिर्फ पुष्टि करने के लिए किया था, और उन दोनों ने दिखाया कि कंपाउंड इंडेक्स का इस्तेमाल किया गया था।
हालांकि, यदि आप निम्न क्वेरी चलाते हैं, तो यह अनुक्रमणिका का उपयोग नहीं करेगा क्योंकि फ़ील्डए पर पूछताछ नहीं की जा रही है:
db.MyCollection.find({FieldB : "B"})
तो यह इंडेक्स में फ़ील्ड्स का क्रम है जो परिभाषित करता है कि क्या इसका उपयोग किसी क्वेरी द्वारा किया जा सकता है, न कि क्वेरी में फ़ील्ड्स का क्रम (यह वही था जिसका लुकास जिक्र कर रहा था)।