Module to help create projection objects when working with mongodb.
npm install mongo-select
var select = require('mongo-select').select();
var mongodb = require('mongodb');
var MongoClient = mongodb.MongoClient;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err) throw err;
var users = db.collection('users');
scripts = users.find({}, select.include(['name', 'email']),
function(err, result){
// code here, access to only result[i]._id, result[i].name and result[i].email
});
});
var select = require('mongo-select').select();
var projection = select.include(['name', 'email', 'children.name']);
console.log(projection); // { 'name': false, 'email': false, 'children.name': false };
var select = require('mongo-select').select();
var projection = select.exclude(['name', 'email', 'children.name']);
console.log(projection); // { 'name': false, 'email': false, 'children.name': false };
var select = require('mongo-select').select();
var projection = select.noId();
console.log(projection); // { '_id': false };
To provide a fluent interface the chaining methods begin with _
. Otherwise this might affect documents with fields named exclude, include, noId.
var select = require('mongo-select').select();
var projection = select.noId()._exclude(['name', 'email', 'children.name']);
console.log(projection); // { '_id': false, 'name': false, 'email': false, 'children.name': false };
var select = require('mongo-select').select();
var projection = select.include(['name', 'email', 'children.name'])._noId();
console.log(projection); // { '_id': false, 'name': true, 'email': true, 'children.name': true };
Sometimes it is important to always exclude or include a set of fields. That means that if they are permanently excluded and then specifically included they won't make it into the projection and viceversa:
var select = require('mongo-select').select();
select.exclude(['name', 'email', 'children.name'])._always();
var exclusion = select.exclude(['address']);
console.log(exclusion); // { 'name': false, 'email': false, 'children.name': false };
var inclusion = select.include(['name', 'email']);
console.log(inclusion); // { };
To clear permanent registrations simply
select.clear();
Pull requests and issues are more than welcome. When submitting a PR make sure to run the tests:
npm test