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

¿Cómo hacer una búsqueda de texto múltiple usando $ consulta de texto y $ o en mongodb/mongoose?

Ese error real sugiere que su mongodb es una versión inferior a 2.6 (por lo que no hay búsqueda de texto de esa manera). Pero no puedes hacer eso de todos modos por dos razones.

  1. Un $or expresión solo puede tener uno expresión de índice especial, siendo "texto" o "geoespacial" en los argumentos.

  2. Está esperando búsquedas de texto en "dos" campos diferentes y solo puede tener uno índice de texto por colección. Sin embargo, ese índice único se puede distribuir en varios campos del documento. Pero no puede solicitar diferentes términos de búsqueda para diferentes campos.

Documentación citar :

Y también debería decir "No puedes usar $or con un $text expresión o $near operador donde cualquiera de los dos se usa en más de una condición". Pero falta esa pequeña información, pero aún no puede hacerlo.

Su sintaxis generalmente no es correcta, pero incluso con la sintaxis correcta en una versión compatible de MongoDB, obtendría un error al intentar usar $or así:

Error: error: {
    "$err" : "Can't canonicalize query: BadValue Too many text expressions",
    "code" : 17287
}

Así que para resolver esto necesitas:

  1. Tener una versión de servidor MongoDB de 2.6 o superior que admita $text sintaxis (o en vivo con formularios de comando)

  2. Vivir con la indexación de múltiples campos y usar un solo índice.

  3. Para ejecutar "consultas separadas" en lugar de sus condiciones "o" y "combinar" los resultados en la interfaz API de su cliente.

Esa es la única forma de obtener condiciones "o" como esta con la búsqueda de texto de MongoDB.