Estoy tratando de crear un filtro dynamic
que se pueda implementar usando al menos 3 letras. Tengo muchos campos contra los cuales estaré filtrando.
Como ejemplo, si estoy tratando de encontrar usuarios por email
, quiero poder escribir "@gma" o al menos "gma" e, idealmente, debería devolver una matriz de todos los usuarios que contengan el valor de filtrado especificado. Esto debería ser igual al buscar propiedades como firstName
, etc.
Mi solución actual solo funciona si proporciono un valor completo que coincida con lo que ya tengo en mi base de datos. por ejemplo test@gmail.com
para email
o john
para firstName
. Quiero poder escribir jo
para este último.
const regexPattern = new RegExp(["^", filterUsersByValue, "$"].join(""), "i"); const filteredU = UserModel.find({ [filterUsersBy]: regexPattern})
Si lo he entendido correctamente, dado que está utilizando JS, puede crear el objeto de find
de esta manera:
let findObj = {} findObj[userKey] = {$regex:userFilter, $options:"i"} const filteredU = UserModel.find(findObj)
Esto crea un objeto como este:
const userFilter = "gma" const userKey = "email" let findObj = {} findObj[userKey] = {$regex:userFilter,$options:"i"} console.log(findObj)
Que es lo mismo que en esta consulta