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