Stephen Bailey Stephen Bailey - 1 year ago 98
Node.js Question

Programmatically build dynamic query with Mongoose

I'm trying to build a search from input received from a form.

router.get('/data', function(req, res) {
var firstName=req.body.firstName,

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);

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){

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 :(

Answer Source

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
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download