Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

801
Vistas
La mejor manera de realizar una búsqueda de texto completo en MongoDB y Mongoose

Estoy buscando en Google desde hace días y probé muchas cosas, pero todavía no puedo realizar una buena búsqueda de texto completo en mi colección de usuarios.

Probé ElasticSearch pero era bastante imposible consultar y paginar...

Probé muchos complementos para Mongoose como ElMongo, mongoose-full-text, Mongoosastic, etc... todos están muy mal documentados y no sé cómo realizar una buena búsqueda de texto completo.

Entonces, mi colección es una colección normal:

 user = { name: String, email: String, profile: { something: String, somethingElse: String } }

Tengo una entrada de búsqueda en una página con un POST simple, si escribo hello world , lo que necesito es buscar en todos los campos de la colección las palabras coincidentes de mi consulta de búsqueda y obtener los resultados.

Sería muy bueno también tener opciones para manejar una paginación como 10 elementos por página o algo así...

¿Cuál es la mejor solución para lograr esto? Estoy usando MongoDB 2.6.* con Mongoose, NodeJS y ExpressJS.

Gracias.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede agregar un índice de texto a su definición de esquema Mongoose que le permite usar el operador$text en sus consultas de búsqueda para find todos los campos incluidos en el índice de texto.

Para crear un índice que admita la búsqueda de texto en, por ejemplo, name y profile.something :

 var schema = new Schema({ name: String, email: String, profile: { something: String, somethingElse: String } }); schema.index({name: 'text', 'profile.something': 'text'});

O si desea incluir todos los campos de cadena en el índice, use el comodín '$**' :

 schema.index({'$**': 'text'});

Esto le permitiría realizar una consulta de búsqueda de texto paginado como:

 MyModel.find({$text: {$search: searchString}}) .skip(20) .limit(10) .exec(function(err, docs) { ... });

Para obtener más detalles, lea la documentación completa de los índices de texto de MongoDB .

over 4 years ago · Santiago Trujillo Denunciar

0

Esta no es una respuesta adicional sino un complemento, pero si la respuesta anterior de JohnnyHK le da una matriz vacía [] .

  1. Pruebe algo básico primero sin limit y skip

    const results = await MyModel.find({ $text: { $search: "text" } });

  2. Verifique si el índice se creó correctamente usando mongosh usando db.stories.getIndexes() o la GUI de la brújula, ambas adjuntas. De lo contrario, cree uno a través de COMPASS GUI o a través de mongosh usandodocumentos

brújula

  1. Luego intente cambiar searchText varias veces e intente.
  2. Incluso después de todo esto, me tomó 7 u 8 ejecuciones del mismo código para obtener resultados adecuados,
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda