आइए एक-एक करके आपके प्रश्न पर आते हैं:
केवल एक निष्पादन से प्रदर्शन मेट्रिक्स को देखना वास्तव में यह नहीं है कि यह कैसे काम करता है। निष्कर्ष निकालने से पहले आपको कई निष्पादनों पर औसत लेना चाहिए क्योंकि खेल में कई कारक हैं। कहा जा रहा है कि, मोंगोडीबी स्मृति में सबसे अधिक बार उपयोग किए जाने वाले दस्तावेज़ों को कैश करता है और इसे तब तक रखता है जब तक कि उसे किसी अन्य दस्तावेज़ के लिए स्मृति उत्पन्न न हो। इसलिए यदि कोई क्वेरी एक्सेस दस्तावेज़ पहले से ही पिछली क्वेरी से कैश की गई है, तो यह तेज़ होना चाहिए।
इसके अलावा MongoDB एकत्रीकरण केवल शुरुआत में यदि कोई हो तो अनुक्रमणिका का उपयोग करता है। उदाहरण के लिए $मिलान
और $सॉर्ट करें
चरण अनुक्रमणिका का उपयोग कर सकते हैं। आपके मामले में $मिलान
पहला पाइपलाइन चरण है, इसलिए यह एक जीत है।
MongoDB में डेटा BSON में स्टोर किया जाता है , इसलिए तिथियां मूल रूप से संख्याएं हैं जब उनकी तुलना की जाती है। तो कोई फर्क नहीं है।
हालांकि मैंने इसका परीक्षण नहीं किया है, मुझे वास्तव में संदेह है कि time_bucket दृष्टिकोण तेजी से प्रतिक्रिया देगा। चूंकि created_at
हमेशा बढ़ेगा, सूचकांक, इस मामले में, समय_बकेट के बिना अंत में भी जोड़ा जाएगा। इसके अलावा, एक साधारण दिनांक फ़ील्ड की तुलना में किसी सरणी पर बनाए जाने पर अनुक्रमणिका का आकार तुलनात्मक रूप से बहुत बड़ा होगा। क्या इससे रैम में इंडेक्स फिट करने की समस्या नहीं होगी।
जब आप मिलान करने से पहले दिनांक फ़ील्ड पर कुछ फ़ंक्शन का उपयोग कर रहे हों तो time_bucket का उपयोग करना समझ में आता है। यदि आप मिलान करने से पहले दिनांक फ़ील्ड से केवल वर्ष निकालते हैं, तो यह मौजूदा अनुक्रमणिका को दिनांक पर बेकार कर देगा।
डेटाबेस में डेटाटाइप से मेल खाने के लिए अन्य तरीकों के बजाय अपने पैरामीटर डालना हमेशा बेहतर होता है।
हाँ, यह मुमकिन है। अगर यह $और
है , आप बस $मिलान
. में अल्पविराम द्वारा अलग किए गए अपने सभी फ़िल्टर निर्दिष्ट करें अवस्था। अगर यह $या
है $or
का इस्तेमाल करें
ऑपरेटर।
अगर आपके पास दो $macth<है /कोड> चरण एक के बाद एक MongoDB इसे एक से जोड़ता है
. इसलिए आपको कई मैच चरणों के परिणाम जोड़ने के बारे में चिंता करने की आवश्यकता नहीं है।
अब आपका अनुकूलन अंक
हां, कवर की गई क्वेरी बहुत तेज हैं।
यदि दस्तावेज़ों का आकार $group
. में कम किया गया है $project
. के उपयोग के आधार पर चरण , तो हाँ यह सच है।
यह जरूरी नहीं कि सच हो लेकिन आम तौर पर ऐसा ही होता है। आप यह उत्तर देख सकते हैं ।