Quick tip: Share a large MongoDB query object between the CLI and Node.js
May 24, 2012
I was writing a very long MongoDB query in JSON that needed to work both in a Mongo CLI script and in a Node.js app. Duplicating the JSON for the query across both raised the risk of one changing without the other. So I dug around for a way to share them and came up with this:
Create a query.js
file, like so (the query is just an example, substitute your own):
// dual-purpose, include me in mongo cli or node.js var module = module || {}; // filler for mongo CLI // query here is for mongo cli. module.exports is for node.js var query = module.exports = { '$and' : [ { '$or' : [ { someField: { '$exists': false } }, { someOtherField: 0 } ] }, { '$or' : [ { 'endDate' : { '$lt' : new Date() } }, { 'endDate' : { '$exists' : false } } ] } // ... ] };
Then in your mongo CLI script, use
load('./query.js'); // sets query var db.items.find( query, { // fields to select ... } ) .sort({ // etc... });
In your Node.js app, use var query = require(‘./query.js’);
and plug the same query into your MongoDB driver or Mongoose find
function. Duplication avoided!