2016-04-15 4 views
5

को अनदेखा करने वाले दस्तावेज़ों को कैसे ढूंढें, मैं अपने mongodb डेटाबेस में संग्रह पर एक खोज करना चाहता हूं। मेरे संग्रह में, मैं क्षेत्र "नाम" के साथ दस्तावेजों की तरह मान हो सकता है:मोंगोडीबी: मामले संवेदनशील, उच्चारण और प्रतिशत जैसे तर्क (%)

[i] "Palácio Guanabara", "Palácio da Cidade", "फेस्टा Palácio", आदि

जब कोई उपयोगकर्ता "पाला" या "पला" या "पाला" या "पला" जैसी खोज टाइप करें, [i] में उन सभी इन्सेंस को परिणाम सेट बनाना होगा।

मैंने पाया कि MongoDB में मैं खोजों में regex का उपयोग कर सकता है, जैसे:

{ "name": { $regex: new Regex(".*pala.*", "i") } } 

ठीक है, इस दृष्टिकोण मामले असंवेदनशील है और SQL ("% pala%") से तर्क की तरह प्रतिशत का उपयोग करें। लेकिन, यह डेटाबेस में रजिस्टर से उच्चारण को नजरअंदाज नहीं करता है। https://docs.mongodb.org/manual/core/index-text/

यह दृष्टिकोण केस संवेदी और लहजे अनदेखा कर सकते हैं:

मैं $ पाठ सूचकांक के साथ एक और विकल्प मिल गया। लेकिन "खोज" एक regex स्वीकार नहीं करता है, इसलिए मैं "% pala%" जैसी चीजें नहीं खोज सकता।

select * from collection where remove_accents(upper(name)) like '%Pala%' 

और "Palácio", "Palacio", "Palacio" की तरह नाम के साथ परिणाम देने इस क्वेरी, आदि

+1

जैसा कि यहां बताया गया है http: // stackoverflow।कॉम/प्रश्न/7707671/mongodb-match-accented-characters-as-underlying-character आपकी संभावित सर्वश्रेष्ठ शर्त आपके खोज योग्य स्ट्रिंग के एक असंतुलित संस्करण के साथ एक फ़ील्ड बनाने के लिए है। – joao

+0

धन्यवाद @joao। मैं दिमित्री दृष्टिकोण का उपयोग करूंगा और भविष्य में मैं यह "खोज योग्य" दायर करूंगा। –

उत्तर

1
:

संक्षेप में, मैं MongoDB में निम्नलिखित SQL क्वेरी बनाना चाहते

मोंगो डीबी के अंदर यहां कोई जादू बुलेट नहीं है। लेकिन चूंकि आप स्पष्ट रूप से '% पाला%' बनाने के लिए उपयोगकर्ता इनपुट को बदलते हैं, क्यों "ए" को "[aá]" से प्रतिस्थापित नहीं करते हैं और "। *" में लपेटते हैं, इस तरह आप रेगेक्स का उपयोग कर सकते हैं और अपनी विशिष्टताएं कर सकते हैं।

यहां विकल्प विकल्प बनाने के लिए बहुत अधिक काम नहीं हैं।

फ्रेंच पत्र [a-zA-ZàâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒ]

जर्मन पत्र ß के लिए विवादास्पद बड़े अक्षर, अब यूनिकोड में शामिल है,, कई फोंट में याद आ रही है, तो यह एक प्रश्न चिह्न के रूप में अपनी स्क्रीन पर दिखाई दे सकते हैं । [a-zA-ZäöüßÄÖÜẞ]

पोलिश पत्र [एक-जनसंपर्क-uwy-zA-पीआर-UWY-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ] नोट नहीं क्यू, वी और एक्स पॉलिश में नहीं है। लेकिन अगर आप सभी अंग्रेजी पत्र के साथ-साथ अनुमति देना चाहते हैं, [a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]

इतालवी पत्र [a-zA-ZàèéìíîòóùúÀÈÉÌÍÎÒÓÙÚ]

स्पेनिश पत्र [a-zA-ZáéíñóúüÁÉÍÑÓÚÜ] से उपयोग करें http://www.rexegg.com/regex-interesting-character-classes.html#languages

+0

मदद के लिए धन्यवाद। इस पल में, मैं अपनी समस्या को हल करने के लिए इस दृष्टिकोण का उपयोग करूंगा। यह काम करता है, मैंने इस उपयोगी पोस्ट का उपयोग इस [पोस्ट] में किया है (http://stackoverflow.com/a/5700735/6209115) –

8

अगर आप सिर्फ का उपयोग क्या हुआ:

find({name: {$regex: 'pala', $options: "i"}}) 

आप new Regex() का उपयोग किया गया है जो मान्य कन्स्ट्रक्टर वैध कन्स्ट्रक्टर नहीं हो सकता है new RegExp()

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