es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo aumentar esta consulta de búsqueda en mongoose?

Aquí está mi consulta actual:

router.get(‘/fiches’, (req, res) => {

// Aquí convierto la entrada en palabras normalizadas y únicas en minúsculas
let words = Utils.normalizeIntoWords(req.query.q)

// La propiedad de palabras clave se genera automáticamente al guardar. Contiene algunas palabras clave en minúsculas y únicas.
Fiche.find({ keywords: { ‘$all’: words } }, (err, data) => {
if (err) return res.json([])
return res.json(data)
})
})

¿Cómo puedo aumentar la consulta para incluir “palabras parciales”?

EDITAR: Aquí está la solución:

router.get(‘/fiches’, (req, res) => {
let words = Utils.words(req.query.q).map(word => new RegExp(‘^’ + word))
Fiche.find({ keywords: { ‘$all’: words } }, (err, data) => {
if (err) return res.json([])
return res.json(data)
})
})

“$all” es mágico, ¡puedes pasar un array de expresiones regulares! ¡Maravilloso! 🙂

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para incluir palabras parciales en la búsqueda, puedes modificar el código para usar expresiones regulares en lugar de coincidencias exactas. Aquí está el código actualizado:

    router.get('/fiches', (req, res) => {
      let words = Utils.words(req.query.q).map(word => new RegExp('^' + word))
      Fiche.find({ keywords: { '$all': words } }, (err, data) => {
        if (err) return res.json([])
        return res.json(data)
      })
    })
    

    En este código, la función Utils.words devuelve un array de palabras individuales de la consulta de entrada. La función map se utiliza luego para convertir cada palabra en una expresión regular que coincide con las palabras que comienzan con esa cadena.

    El array resultante de expresiones regulares se pasa al operador $all en la consulta Fiche.find, que coincide con cualquier documento con al menos una palabra clave que coincida con todas las expresiones regulares. Esto incluirá coincidencias parciales para cada palabra de la consulta de entrada.

Comments are closed.