सामान्य तौर पर MongoDB प्रश्नों का समर्थन करने के लिए अनुक्रमणिका उपसर्गों का उपयोग कर सकता है, हालांकि भू-स्थानिक या पाठ फ़ील्ड सहित मिश्रित अनुक्रमणिका विरल मिश्रित अनुक्रमणिका . यदि किसी दस्तावेज़ में कंपाउंड इंडेक्स में किसी भी टेक्स्ट इंडेक्स फ़ील्ड के लिए कोई मान शामिल नहीं है, तो इसे इंडेक्स में शामिल नहीं किया जाएगा।
सुनिश्चित करने के लिए सही परिणाम ए> उपसर्ग खोज के लिए, विरल यौगिक अनुक्रमणिका पर एक वैकल्पिक क्वेरी योजना का चयन किया जाएगा:
संभावित समस्या को प्रदर्शित करने के लिए MongoDB 3.4.5 में कुछ परीक्षण डेटा सेट करना:
db.myCollection.createIndex({ user_id:1, name: 'text' }, { name: 'myIndex'})
// `name` is a string; this document will be included in a text index
db.myCollection.insert({ user_id:123, name:'Banana' })
// `name` is a number; this document will NOT be included in a text index
db.myCollection.insert({ user_id:123, name: 456 })
// `name` is missing; this document will NOT be included in a text index
db.myCollection.insert({ user_id:123 })
फिर, मिश्रित पाठ अनुक्रमणिका का उपयोग करने के लिए बाध्य करना:
db.myCollection.find({user_id:123}).hint('myIndex')
परिणाम में केवल अनुक्रमित टेक्स्ट फ़ील्ड वाला एकल दस्तावेज़ शामिल होता है name
, अपेक्षित तीन दस्तावेज़ों के बजाय:
{
"_id": ObjectId("595ab19e799060aee88cb035"),
"user_id": 123,
"name": "Banana"
}
MongoDB दस्तावेज़ीकरण में इस अपवाद को अधिक स्पष्ट रूप से हाइलाइट किया जाना चाहिए; watch/upvote DOCS-10322 अपडेट के लिए MongoDB इश्यू ट्रैकर में।