MongoDB addons
npm install mongodb-addons
- Best use with total.js - web application framework for node.js
JOIN & MERGE
// cursor.join('relationship-property', 'where-to-bind', 'collection-name', [fields], [additional-filter])// relationship-property -> is compared with ._id and values must be ObjectId()// cursor.merge(function(err, rows) {}) db; // or db; db;
GridStore
- is a global variable
GridStore;
GridStore;
ObjectID
- is a global variable
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 = ;// var builder = new MongoBuilder(skip, take); builder;builder;builder; // true === AUTOCONVERT string to ObjectIDbuilder; // default operator is "="builder; // true == ascending, false == descending builder;builder;builder; // builder.between(name, min, max);// builder.like(name, value);// builder.regex(name, value);// builder.or()...filter...end();// builder.and()...filter...end();// builder.in(name, value);// builder.nin(name, value);// builder.field(name, [visible]); --> visible is by default: true// builder.fields(field1, field2, field3, ...);// builder.where(name, operator, value);// builder.filter(name, operator, value); --> is same as builder.where()// builder.clear();// builder.clearFilter([skip, take]);// builder.clearSort();// builder.clearAggregate();// builder.clearSet();// builder.clearInc();// builder.take(number);// builder.limit(number); --> is same as builder.take()// builder.skip(number);// builder.sort(name, [asc]);// builder.page(page, max); builder; // Sets the page 3 with 50 items (max) on the page // Execute// Uses filter, pagination + sorting and returns cursorbuilder; // Execute// Uses filter, pagination + sorting + count() + requery collectionbuilder; // Uses filter, pagination + sortingbuilder; // Execute// Uses filterbuilder; builder; builder;
Inserting
var builder = ; // Values to insertbuilder;builder;builder; // Executebuilder;
Updating
_id
property is skipped automatically
var builder = ; // Filterbuilder; // Updatebuilder;builder;builder; // builder.push(name, value)// builder.pull(name, value)// builder.addToSet(name, value)// builder.pop(name, value)// builder.unset(name, value) // Updates only age field// _id is skipped automaticallybuilder; // Skips the age field// _id is skipped automaticallybuilder; // Executebuilder; // Executebuilder;
Updating of differences
var builder = ; // A some document from database which we will update later.var doc = {}; // A document from the formvar form = {}; // Filterbuilder; // Makes a differences// builder.diff(doc, form, ['only', 'this', 'properties']);// builder.diff(doc, form, ['skip', 'this', 'properties'], true);if builder builder;
Deleting
var builder = ; // Filterbuilder; // Executebuilder; builder;
Aggregation
$match:
var builder = ; builder;// { $match: { _id: 54d916f34c46f862576336a3 }}
$skip and $limit:
builder;// { $skip: 10 } builder;// { $limit: 10 }
$sort:
var builder = ; builder;// { $sort: { age: -1 }}
$group:
builder;builder;// { $group: { _id: { year: '$year', month: '$month' }, count: { $sum: 1 }}} builder;// { $group: { _id: null, count: { $avg: '$quantity' }}} builder;builder;// { $group: { _id: 'item', count: { $push: ['$item', '$quantity'] }}}
$unwind:
builder;// { $unwind: '$sizes' }}
$project:
builder;builder;// { $project: { 'title': 1, 'author': 1 }}
execute aggregation:
// builder.aggregate(collection, [options], callback);builder;
Serialization / Deserialization
var builder = ; // Filterbuilder; // Serialize builder to JSONvar json = builder;builder;
Cloning & Merging
var builder = ; // Filterbuilder; // Cloningvar newbuilder = builder;var newbuilderOnlyFilterAndSort = builder; newbuilder; builder;// builder.merge(builder, [rewrite], [onlyFilter]);
Generators
var builder = ; // builder.$$findCount(collection, [fields]);// builder.$$find(collection, [fields]);// builder.$$count(collection);// builder.$$findOne(collection, [fields]);// builder.$$insert(collection, [options]);// builder.$$update(collection, [options]);// builder.$$updateOne(collection, [options]);// builder.$$remove(collection, [options]);// builder.$$removeOne(collection, [options]);// builder.$$aggregate(collection, [options]); // Total.js example:var users = ;console;
Extra
You can change the input arguments via delegates:
var builder = ; builder { }; builder { // e.g. obj.$set // e.g. obj.$inc}; builder { }; builder { };