MongoDB addons
npm install mongodb-addons
## JOIN & MERGE
db.collection('products').find().join('idcategory', 'category', 'categories-collection').merge(function(err, docs) {
console.log(docs);
});
db.collection('products').find().join('idcategory', 'category', 'categories', { name: 1 }).merge(function(err, docs) {
console.log(docs);
});
db.collection('products').find().join('idcategory', 'category', 'categories', { name: 1 }, { removed: false }).merge(function(err, docs) {
console.log(docs);
});
GridStore
GridStore.writeFile(DB, new ObjectID(), '/path/file.txt', 'file.txt', { 'ME':1 }, function(err) {
});
GridStore.readFile(DB, 'object-id', function(err, fs, close) {
var writer = fs.createWriteStream('/path/file.txt');
fs.stream(true).on('close', close).pipe(writer);
});
## ObjectID
## ObjectID.parse(value)
- a simple static function to parse ObjectID from some value
## ObjectID.parseArray(value)
- a simple static function to parse Array of ObjectID from string array or from string (delimiter ",")
## MongoBuilder
A helper class for building filters and it's a global variable.
Quering
var builder = new MongoBuilder();
builder.between('age', 20, 30);
builder.or().where('firstname', '=', 'Peter').where('firstname', '=', 'Jozef').end();
builder.where('_id', '=', '0000', true);
builder.where('isremoved', false);
builder.sort('age', false);
builder.field('age');
builder.field('firstname');
builder.fields('age', 'firstname', 'lastname');
builder.page(3, 50);
builder.find(COLLECTION).toArray(function(err, docs) {
console.log(docs);
});
builder.findArrayCount(COLLECTION, function(err, docs, count) {
console.log(docs, count);
});
builder.findArray(COLLECTION, function(err, docs) {
console.log(docs);
});
builder.findOne(COLLECTION, function(err, doc) {
console.log(doc);
});
builder.count(COLLECTION, function(err, count) {
console.log(count);
});
builder.distinct(COLLECTION, 'KEY', function(err, docs) {
console.log(docs);
});
Inserting
var builder = new MongoBuilder();
builder.set('_id', new ObjectID());
builder.set('firstname', 'Peter');
builder.set({ firstname: 'Peter', lastname: 'Širka' });
builder.insert(COLLECTION, function(err, result) {
console.log(result);
});
Updating
_id
property is skipped automatically
var builder = new MongoBuilder();
builder.where('age', '>', 10);
builder.set('firstname', 'Peter');
builder.set({ firstname: 'Peter', lastname: 'Širka' });
builder.inc('countview', 1);
builder.set({ _id: ObjectID('..'), firstname: 'Peter' lastname: 'Širka', age: 30 }, ['age']);
builder.set({ _id: ObjectID('..'), firstname: 'Peter' lastname: 'Širka', age: 30 }, ['age'], true);
builder.update(COLLECTION, function(err, result) {
console.log(result);
});
builder.updateOne(COLLECTION, function(err, result) {
console.log(result);
});
Updating of differences
var builder = new MongoBuilder();
var doc = {};
var form = {};
builder.where('_id', SOME_OBJECT_ID);
if (builder.diff(doc, form))
builder.updateOne();
Deleting
var builder = new MongoBuilder();
builder.where('age', '>', 10);
builder.remove(COLLECTION, function(err, result) {
console.log(result);
});
builder.removeOne(COLLECTION, function(err, result) {
console.log(result);
});
Aggregation
$match:
var builder = new MongoBuilder();
builder.where('_id', '=', new ObjectID());
$skip and $limit:
builder.skip(10);
builder.take(10);
$sort:
var builder = new MongoBuilder();
builder.sort('age', false);
$group:
builder.group('_id.year.year', 'count.$sum.1');
builder.group('_id.month.month');
builder.group('_id.', 'count.$avg.quantity');
builder.group('_id.item', 'count.$push.item');
builder.group('_id.item', 'count.$push.quantity');
$unwind:
builder.unwind('sizes');
$project:
builder.project('title.1');
builder.project('author.1');
execute aggregation:
builder.aggregate(COLLECTION, function(err, results) {
console.log(results);
});
Serialization / Deserialization
var builder = new MongoBuilder();
builder.where('age', '>', 10);
var json = builder.save();
builder.load(json);
Cloning & Merging
var builder = new MongoBuilder();
builder.where('age', '>', 10);
var newbuilder = builder.clone();
var newbuilderOnlyFilterAndSort = builder.clone(true);
newbuilder.where('firstname', 'Peter');
builder.merge(newbuilder);
Generators
var builder = new MongoBuilder();
var users = yield sync(builder.$$find(DATABASE('users')))();
console.log(users);
You can change the input arguments via delegates:
var builder = new MongoBuilder();
builder.onFilter = function(obj) {
};
builder.onUpdate = function(obj) {
};
builder.onInsert = function(obj) {
};
builder.onAggregate = function(obj) {
};