sql >> Base de Datos >  >> NoSQL >> MongoDB

La consulta de Mongodb no usa el prefijo en el índice compuesto con campo de texto

En general, MongoDB puede usar prefijos de índice para admitir consultas; sin embargo, los índices compuestos que incluyen campos geoespaciales o de texto son un caso especial de índices compuestos dispersos . Si un documento no incluye un valor para ninguno de los campos de índice de texto en un índice compuesto, no se incluirá en el índice.

Para garantizar resultados correctos para una búsqueda de prefijo, se elegirá un plan de consulta alternativo sobre el índice compuesto disperso:

Configuración de algunos datos de prueba en MongoDB 3.4.5 para demostrar el problema potencial:

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

Luego, forzando el uso del índice de texto compuesto:

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

El resultado solo incluye el documento único con el campo de texto indexado name , en lugar de los tres documentos que cabría esperar:

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

Esta excepción debería resaltarse más claramente en la documentación de MongoDB; ver/votar a favor DOCS-10322 en el rastreador de problemas de MongoDB para actualizaciones.