यहां आपके पास दो विकल्प हैं। पहला है $where का इस्तेमाल करना
ऑपरेटर।
Collection.find( { $where: "this.start === this.end" } )
दूसरा विकल्प एग्रीगेशन फ्रेमवर्क और $redact
ऑपरेटर।
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
$where ऑपरेटर एक जावास्क्रिप्ट मूल्यांकन करता है और इंडेक्स का लाभ नहीं उठा सकता है इसलिए $where . का उपयोग करके क्वेरी करें आपके आवेदन में प्रदर्शन में गिरावट का कारण बन सकता है। देखें विचार
. यदि आप $ का उपयोग करते हैं, जहां $ जहां ऑपरेशन से पहले आपका प्रत्येक दस्तावेज़ बीएसओएन से जावास्क्रिप्ट ऑब्जेक्ट में परिवर्तित हो जाएगा, तो प्रदर्शन में गिरावट आएगी। यदि आपके पास इंडेक्स फ़िल्टर है तो निश्चित रूप से आपकी क्वेरी में सुधार किया जा सकता है। साथ ही यदि आप उपयोगकर्ता इनपुट के आधार पर अपनी क्वेरी को गतिशील रूप से बना रहे हैं तो सुरक्षा जोखिम भी है।
$redact जैसे $where इंडेक्स का उपयोग नहीं करता है और यहां तक कि एक संग्रह स्कैन भी नहीं करता है, लेकिन जब आप $redact करते हैं तो आपकी क्वेरी के प्रदर्शन में सुधार होता है क्योंकि यह एक मानक MongoDB ऑपरेटर है। कहा जा रहा है कि एकत्रीकरण विकल्प कहीं बेहतर है क्योंकि आप हमेशा $match ऑपरेटर का उपयोग करके अपने दस्तावेज़ को फ़िल्टर कर सकते हैं।
$where यहाँ ठीक है लेकिन टाला जा सकता है। साथ ही मेरा मानना है कि आपको केवल $where . की आवश्यकता है जब आपको स्कीमा डिज़ाइन की समस्या हो। उदाहरण के लिए इंडेक्स वाले दस्तावेज़ में एक और बूलियन फ़ील्ड जोड़ना यहां एक अच्छा विकल्प हो सकता है।