¿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! 🙂
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:
En este código, la función
Utils.words
devuelve un array de palabras individuales de la consulta de entrada. La funciónmap
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 consultaFiche.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.