sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb dotaz nepoužívá prefix na složeném indexu s textovým polem

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.



  1. Aplikace Node / Express se nemůže připojit k docker mongodb

  2. Jaký je ekvivalent shellového příkazu collection.getIndexes() v pymongo?

  3. Pruh:Musí poskytnout zdroj nebo zákazníka

  4. MongoDB:mongoimport ztratí připojení při importu velkých souborů