Quiero buscar a través de mi repositorio de usuario con una cadena de consulta.Expressjs: consulta de búsqueda api
Esto debería devolver todos los usuarios con un nombre de usuario "kyogron" similar y similares de correo electrónico "kyogron @ gmail"
GET localhost:3000/users?username=kyogron&[email protected]
Esto debería devolver todos los usuarios:
GET localhost:3000/users
ya me las arreglé para manejar la parámetros de enrutamiento, pero estoy atascado en la optimización de él:
app.get('/users', function(req, res) {
// creates a mongoosejs query object
var query = User.find({});
// to understand how expressjs handles queries:
// ?username=kyogron&[email protected]
// { username: "kyogron", email: "[email protected]" }
//console.log(req.query);
// this was one idea of optimizing the search query parameters
// this doesn't work don't know why I always get an array of ALL users
// even the key and value is right
Object.keys(req.query).forEach(function(key) {
query.select(key, req.query[key]);
});
// this was the way I was first handling the parameters, this works !!
//if (req.query.username) query.where('username', req.query.username);
//if (req.query.email) query.where('email', req.query.email);
// the rest of the query
query.select('username', 'email');
query.exec(function(err, users) {
if (err) throw err;
res.json(users);
});
});
Estos son los p Problemas con los que estoy peleando:
- ¿Por qué no iterar el objeto de consulta requerida?
- ¿Cómo digo mangosta utilizar un comodín (por ejemplo kyo *)
Sería bueno si alguien me podría ayudar :)
Saludos
EDITAR:
La segunda cuestión sería solucionable con $ donde:
if (req.query.username) {
query.$where(function() {
return this.username === req.query.username; // here we need a regex check
});
}
Thos no funciona ... ¿Podría alguien darme una pista?
Edit2:
¿No consiguió nada con $ ... sin embargo, donde ahora se encuentra
query.where('username').regex();
sólo tengo que buscar una expresión regular búsqueda, que busca palabras similares
Edit3:
me encontré con este tema: How to query MongoDB with "like"? te pido en el grupo mongoosejs cómo podría hacer esto con mangosta
EDIT4:
if (req.query.username) {
query.where('username').regex(new RegExp("\/"+req.query.username+"\/"));
}
casi lo tengo. Tan solo hay que solucionar este regex estúpida ...