MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Заявката на Mongodb не използва префикс в съставен индекс с текстово поле

По принцип 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; гледане/гласуване за DOCS-10322 в програмата за проследяване на проблеми MongoDB за актуализации.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Спрете Mongoose да създава свойство _id за елементи от масив от поддокумент

  2. Зависимостите на Gradle не работят в IntelliJ

  3. Как да спрете изграждането на Runaway Index в MongoDB

  4. Актуализация на MongoDB с условие

  5. Филтърен масив MongoDb