MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zapytanie Mongodb nie używa prefiksu w indeksie złożonym z polem tekstowym

Ogólnie MongoDB może używać prefiksów indeksów do obsługi zapytań, jednak indeksy złożone, w tym pola geoprzestrzenne lub tekstowe, są szczególnym przypadkiem rzadkie indeksy złożone . Jeśli dokument nie zawiera wartości dla żadnego z pól indeksu tekstowego w indeksie złożonym, nie zostanie on uwzględniony w indeksie.

Aby zapewnić poprawne wyniki dla wyszukiwania prefiksu, alternatywny plan zapytania zostanie wybrany przez rzadki indeks złożony:

Konfigurowanie niektórych danych testowych w MongoDB 3.4.5, aby zademonstrować potencjalny problem:

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 })

Następnie wymuszając użycie złożonego indeksu tekstowego:

db.myCollection.find({user_id:123}).hint('myIndex')

Wynik zawiera tylko pojedynczy dokument z indeksowanym polem tekstowym name , a nie trzy dokumenty, których można by się spodziewać:

{
  "_id": ObjectId("595ab19e799060aee88cb035"),
  "user_id": 123,
  "name": "Banana"
}

Ten wyjątek powinien być wyraźniej podkreślony w dokumentacji MongoDB; oglądaj/zagłosuj DOCS-10322 w narzędziu do śledzenia problemów MongoDB w celu uzyskania aktualizacji.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo MapReduce wybierz ostatnią datę

  2. Pomiń i ogranicz paginację dla agregatu Mongo

  3. Nie można połączyć się z bazą danych MongoDB 2.0.5 za pomocą pymongo 2.2

  4. Mongoose save() nie aktualizuje wartości w tablicy w dokumencie bazy danych

  5. 5 sposobów na wybranie wierszy o maksymalnej wartości dla ich grupy w SQL