PGT PGT - 3 months ago 13
Javascript Question

Is there a way to use a variable for the field name in a find() in mongoose?

Say you have a very long generic function you want to use over multiple schemas, and each schema has a different name for the field you're querying (and possibly different type of value -- string, number, etc.)

function foo (field, value){
Model.find({field: value});
}

foo('idfoo', 'xx');
foo('idbar', 5);


I tried to do something like this as a proof of concept in mongoose and it seems it will only work if you use a variable for value, but you can't for field.

Is this impossible?

Answer

You could use the built in where function, making the call to the function you've shown unnecessary:

Model.find().where(fieldName, value).exec(function(err, results) { });

And you could do more than one via chaining:

Model.find().where(field1, val1).where(field2, val2).exec(...)

It also can be rich, supporting nested properties and other operators:

Model.find().where('orders.total').gt(1500).exec(...)