Saltar al contenido

mongoDB prefix comodín: búsqueda de texto completo ($texto) buscar parte con búsqueda-string

Presta atención ya que en esta noticia encontrarás el hallazgo que buscas.

Solución:

No es posible hacerlo con $text operador.

Los índices de texto se crean con los términos incluidos en el string valor o en una cadena array y la búsqueda se basa en esos idexes.

Solo puede agrupar términos en una frase pero no formar parte de ellos.

Leer $text referencia del operador y descripción de índices de texto.

Lo que estás tratando de hacer en tu segundo ejemplo es prefix búsqueda con comodines en tu colección mycoll en el campo foo. Esto no es algo para lo que está diseñada la función de búsqueda de texto y no es posible hacerlo con $text operador. Este comportamiento no incluye comodines prefix buscar en cualquier token dado en el campo indexado. Sin embargo, también puede realizar una búsqueda de expresiones regulares como lo sugirieron otros. Aquí está mi tutorial:

>db.mycoll.find()
 "_id" : ObjectId("53add9364dfbffa0471c6e8e"), "foo" : "my super cool item" 
 "_id" : ObjectId("53add9674dfbffa0471c6e8f"), "foo" : "your not so cool item" 
> db.mycoll.find( $text:  $search: "super" )
 "_id" : ObjectId("53add9364dfbffa0471c6e8e"), "foo" : "my super cool item" 
> db.mycoll.count( $text:  $search: "uper" )
0

los $text El operador admite la búsqueda de una sola palabra, la búsqueda de una o más palabras o la búsqueda de una frase. El tipo de búsqueda que desea no es compatible

La solución de expresiones regulares:

> db.mycoll.find(foo:/uper/)
 "_id" : ObjectId("53add9364dfbffa0471c6e8e"), "foo" : "my super cool item" 
> 

La respuesta a tu pregunta final: hacer estilo mysql %super% en mongoDB lo más probable es que tengas que hacer:

db.mycoll.find(  foo : /.*super.*/  );

No tengo suficiente reputación para comentar la solución jasenkoh, pero esta es claramente la mejor manera de lidiar con esta situación.

En la situación OP, yo:

db.mycoll.createIndex(  foo: "text"  )
db.mycoll.createIndex(  foo: 1  )
db.mycoll.find($or: [$text: $search: 'uper', foo: $regex: 'uper'])

Para mejores actuaciones (pero resultados ligeramente diferentes), reemplace la última línea con:

db.mycoll.find($or: [$text: $search: 'uper', foo: $regex: '^uper'])

Te mostramos las comentarios y valoraciones de los lectores

Si te ha resultado de utilidad nuestro artículo, sería de mucha ayuda si lo compartieras con otros juniors y nos ayudes a difundir este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *