$in का उपयोग करें
प्रश्न में प्रश्न के लिए, $in
. का उपयोग करना अधिक उपयुक्त हैdb.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
यह काम क्यों नहीं करता
एक लापता उद्धरण है - क्ली आपके दूसरे भाग के समाप्त होने की प्रतीक्षा कर रहा है या:
db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
आपको क्ली के लिए इसे पार्स करने के लिए क्वेरी को पर्याप्त रूप से समाप्त करने की आवश्यकता है ताकि यह कहा जा सके कि कोई सिंटैक्स त्रुटि है।
केस असंवेदनशील मिलान
जैसा कि एक टिप्पणी द्वारा इंगित किया गया है, यदि आप किसी मामले को असंवेदनशील तरीके से खोजना चाहते हैं, तो आप या तो $or
का उपयोग करें $regex के साथ:
db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )
या, आप बस एक रेगेक्स का उपयोग करें:
db.Profiles.find ( { "name" : /^(gary|rob)/i } )
हालांकि, एक रेगेक्स क्वेरी जो एक निश्चित स्ट्रिंग से शुरू नहीं होती है, एक इंडेक्स का उपयोग नहीं कर सकती है (यह एक इंडेक्स का उपयोग नहीं कर सकती है और प्रभावी रूप से "जब तक कोई मैच नहीं मिला तब तक यहां शुरू करें") और इसलिए उप-इष्टतम है। यदि यह आपकी आवश्यकता है, तो सामान्यीकृत नाम फ़ील्ड को संग्रहीत करना एक बेहतर विचार है (उदा. name_lc
- लोअर केस का नाम) और उस पर सवाल:
db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );