MongoDB může obecně používat předpony indexu k podpoře dotazů, ale složené indexy včetně geoprostorových nebo textových polí jsou zvláštním případem řídké složené indexy . Pokud dokument neobsahuje hodnotu žádného z polí textového indexu ve složeném indexu, nebude do indexu zahrnut.
Aby bylo zajištěno správné výsledky pro vyhledávání prefixů bude vybrán alternativní plán dotazů nad řídkým složeným indexem:
Nastavení některých testovacích dat v MongoDB 3.4.5 k prokázání potenciálního problému:
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 })
Poté vynucení použití indexu složeného textu:
db.myCollection.find({user_id:123}).hint('myIndex')
Výsledek zahrnuje pouze jeden dokument s indexovaným textovým polem name
, spíše než tři dokumenty, které by se očekávaly:
{
"_id": ObjectId("595ab19e799060aee88cb035"),
"user_id": 123,
"name": "Banana"
}
Tato výjimka by měla být jasněji zdůrazněna v dokumentaci MongoDB; sledovat/hlasovat DOCS-10322 v nástroji pro sledování problémů MongoDB pro aktualizace.