चूंकि मोंगोडब 3.2 , पाठ अनुक्रमणिका विशेषक असंवेदनशील हैं:
<ब्लॉककोट>संस्करण 3 के साथ, पाठ अनुक्रमणिका विशेषक असंवेदनशील है। अर्थात्, सूचकांक उन वर्णों के बीच अंतर नहीं करता है जिनमें विशेषक चिह्न होते हैं और उनके गैर-चिह्नित समकक्ष, जैसे कि é, , और e। अधिक विशेष रूप से, टेक्स्ट इंडेक्स यूनिकोड 8.0 कैरेक्टर डेटाबेस प्रोप लिस्ट में डायक्रिटिक्स के रूप में वर्गीकृत वर्णों को अलग करता है।
तो निम्नलिखित प्रश्न काम करना चाहिए:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
लेकिन ऐसा लगता है कि डायरेसिस (¨) के साथ एक बग है, भले ही इसे यूनिकोड 8.0 सूची में डायक्रिटिक के रूप में कैटरराइज़ किया गया हो (JIRA पर जारी:सर्वर-29918)
समाधान
चूंकि मोंगोडब 3.4 आप संयोजन का उपयोग कर सकते हैं जो आपको इस प्रकार की क्वेरी करने की अनुमति देता है:
उदाहरण के लिए, अपना अपेक्षित आउटपुट प्राप्त करने के लिए, निम्न क्वेरी चलाएँ:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
यह आउटपुट होगा:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
संयोजन में, strength
प्रदर्शन करने के लिए तुलना का स्तर है
- 1 :केवल मूल वर्ण
- 2 :विशेषक संवेदनशील
- 3 :केस सेंसिटिव + डायक्रिटिक सेंसिटिव