2013-04-15 6 views
8

मैं उपयोगकर्ता द्वारा जो खोजा गया है उससे एक प्रश्न उत्पन्न करने का प्रयास कर रहा हूं। मैं श्रृंखलाएं जिनमें मैं सिर्फ MongoDB चयनकर्ता में के माध्यम से भेजना चाहते हैं की एक सरणी है, मेरी समस्या,/पाठ/वाक्य रचना के साथ है इसे इस तरह MongoDB कंसोल से पूरी तरह से काम करता है:उल्का और mongoDB LIKE क्वेरी

Items.find({ $or: [{name: /doc/}, {tags: /doc/}, {name: /test/}, {tags: /test/}] }); 

लेकिन मैं करने के लिए प्रबंधन नहीं कर सकते जावास्क्रिप्ट में एक ही वाक्यविन्यास लिखें, मैंने कई संस्करणों की कोशिश की है।

var mongoDbArr = []; 
    searchArray.forEach(function(text) { 
    mongoDbArr.push({name: /text/}); 
    mongoDbArr.push({tags: /text/}); 
    }); 
    return Items.find({ $or: mongoDbArr}); 

लेकिन यह केवल "टेक्स्ट" की खोज करता है और चर में क्या नहीं है। और इस तरह:

लेकिन यह मुझे कोई परिणाम नहीं देता है। मैं क्या खो रहा हूँ?

+0

क्या आप सर्वर पर mongodb का उपयोग करते हैं, या क्लाइंट पर minimongo? (या दोनों?) – mquandalle

+0

अभी, दोनों। मैं सिर्फ मेटियर डिफ़ॉल्ट सेटिंग्स के साथ एक ऐप की कोशिश कर रहा हूँ। – Snidd

उत्तर

18

आप जावास्क्रिप्ट के साथ अपने रेगुलर एक्सप्रेशन का निर्माण करने के लिए है: या

var mongoDbArr = []; 
searchArray.forEach(function(text) { 
    mongoDbArr.push({name: new RegExp(text)}); 
    mongoDbArr.push({tags: new RegExp(text,"i")}); 
}); 

return Items.find({ $or: mongoDbArr}); 

MongoDB के साथ एक regular expressions क्वेरी का उपयोग करें:

mongoDbArr.push({name: { $regex : text, $options:"i" } }); 
mongoDbArr.push({tags: { $regex : text, $options:"i" } }); 

विशेष वर्णों से बचने के लिए आपका उपयोग करने से पहले ऐसा कर सकते हैं(JQuery UI के स्रोत से)

text = text.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); 
+0

नियमित अभिव्यक्ति अब के लिए काम करती है, मुझे चिंता है कि जब उपयोगकर्ता आरक्षित पात्रों में प्रवेश करता है तो इसका मतलब क्या होता है जिसका मतलब रेगेक्स में अलग-अलग चीजें हैं। – Snidd

+0

Ive ने विशेष वर्णों से बचने के लिए उत्तर को संशोधित किया। – Akshat

+0

वाह। क्या इन दोनों रेगेक्स प्रश्न क्लाइंट साइड काम करते हैं? वाह। हाँ यह करता है। होश उड़ जाना। इसे अपने नए [उल्का स्वत: पूर्णता] में डालकर (https://github.com/mizzao/meteor-autocomplete) पैकेज ... –

5

सर्वर में प्रकाशित समारोह में इस प्रयास करें:

return YourCollection.find({'$or' : [ 
    { 'field1':{'$regex':searchString} }, 
    { 'field2':{'$regex':searchString} }, 
    { 'field3':{'$regex':searchString} }, ] 
}); 
+0

यह मेरे लिए काम किया। धन्यवाद! –

संबंधित मुद्दे