आपके व्याख्या आउटपुट में संग्रह स्कैन map_levels
. को संदर्भित कर रहा है संग्रह, जैसा कि queryPlanner.namespace
. में बताया गया है मूल्य। $lookup
चरण दूसरे संग्रह से डेटा को वर्तमान पाइपलाइन में मर्ज करता है। चूंकि आपने $lookup
. से पहले कोई क्वेरी चरण निर्दिष्ट नहीं किया है , map_levels
संग्रह स्कैन का उपयोग करके संग्रह को पुनरावृत्त किया जाएगा। यदि एक संपूर्ण संग्रह को बिना किसी फ़िल्टरिंग या सॉर्ट मानदंड के लोड किया जा रहा है, तो एक संग्रह स्कैन में इंडेक्स को पुनरावृत्त करने और दस्तावेज़ों को लाने की तुलना में कम ओवरहेड होता है।
आप $match
. जोड़कर मौजूदा संग्रह स्कैन से बच सकते हैं आपके $lookup
. से पहले का चरण (यह मानते हुए कि आप पूर्ण map_levels
. को संसाधित नहीं करना चाहते हैं संग्रह)।
दुर्भाग्य से क्वेरी व्याख्या आउटपुट (जैसे कि MongoDB 4.0 पर) $lookup
. के लिए अनुक्रमणिका उपयोग को इंगित नहीं करता है चरण। इसके लिए एक वैकल्पिक हल यह होगा कि आप अपने लुकअप की pipeline
. का उपयोग करके व्याख्या करें एक शीर्ष स्तरीय एकत्रीकरण क्वेरी के रूप में।
MongoDB इश्यू ट्रैकर में देखने/अपवोट करने के लिए एक प्रासंगिक समस्या है:SERVER-22622:$lookup में सुधार करें "से" संग्रह पर क्वेरी योजना को इंगित करने के लिए समझाएं ।