I'm trying to build a search from input received from a form.
router.get('/data', function(req, res) {
var firstName=req.body.firstName,
lastName=req.body.lastName,
companyName=req.body.companyName,
email=req.body.email;
});
I'd like to build a query up from these values, but if the field has no value, I obviously don't want to include it in the search (searching for "" would change the results)
I've tried a couple different things, like building a string to place in:
mongoose.model('customers').find({QUERY STRING WOULD GO HERE} ,function(err, data) {
if (err) return console.error(err);
console.log(data);
});
But that doesn't seem to work properly. I also tried "stacking" search queries like this:
if(firstName !="") {
mongoose.model('customers').find({firstName: firstName})
}
and then executing the search like this:
mongoose.model('customers').exec(function(err, customer){
console.log(customer);
});
But that causes 500 errors (and I'm not sure if there's any more info I can get from them).
Please help a Newbie dynamically build a mongoose search query :(
try creating query
object, like:
//generate query object based on availability of value
var query = {};
if( your_variable !== "" ) {
query["some_key"] = your_variable;
}
if( your_second_variable !== "" ) {
query["some_other_key"] = your_second_variable;
}
mongoose.model('customers').find(query, function(err, c) {
//do something
});
For people using newer JavaScript (and especially on Node.js 7.6.0+ or Babel).
The best way I found for programmatically building queries (based on if
clauses etc.) is using the Query and the alternative syntax.
let query = PersonModel().find();
if (isMale) {
query.where('sex', 'male');
} else {
query.where('sex', 'female');
}
query.where('alive', true);
// and then to run the query
const result = await query.exec();
Note the async/await
usage here. It's working perfectly on Node.js 7.6.0+. If you don't want to use async/await
you can just use Promises like so:
query.exec().then(result => {
// result has your... results
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With