mongoritwo v2.2.7
Mongoritwo
ES6 generator-based MongoDB ODM. Fork of vdemedes/mongorito with power-users/business-users in mind.
Uses official mongodb driver under the hood.
Quick overview
const mongoritwo = require('mongoritwo');
const Model = mongoritwo.Model;
class Post extends Model {
}
mongoritwo.connect('localhost/blog');
let post = new Post({
title: 'Steve Angello rocks',
author: {
name: 'Emma'
}
});
post.save();
// post savedFeatures
- Based on Promises, which means no callbacks
- Established API you've already used to
- Hooks (before:save, around:create, after:remove, etc)
- Fully covered by tests
- Using this module results in a beautiful code
Installation
$ npm install mongoritwo --saveUsage
Connection
Check out connection example.
Here's how to connect to a blog database on localhost:
await mongoritwo.connect('localhost/blog');To disconnect, use mongoritwo.disconnect():
await mongoritwo.disconnect();Models
Use classes to define models:
const Model = mongoritwo.Model;
class Post extends Model {
}This defines model Post with documents in posts collection.
To use a custom collection, add collection() method, which returns the name of the desired collection:
class Post extends Model {
collection () {
return 'super_cool_posts';
}
}Mongoritwo models can also be defined old-fashioned Backbone way:
const Post = Model.extend({
collection: 'posts'
});Note: collection property has to be set.
Attributes
Check out attributes example.
To create a new instance of a model, simply use new:
let post = new Post({
title: 'Great title',
author: {
name: 'Emma'
}
});To retrieve a specific attribute (even a nested one):
let title = post.get('title');
let author = post.get('author.name');All attributes can be retrieved at once using either toJSON() or get():
let attrs = post.toJSON();
let attrs = post.get();Set new values via set() method:
post.set('title', 'New title');
post.set('author.name', 'Rachel');Save & Remove
Check out manage example.
Use a save() method to create/update (Mongoritwo handles that for you) a model:
let post = new Post();
await post.save(); // creates a new post
post.set('title', 'New title');
await post.save(); // updates an existing postTo remove a model from collection:
await post.remove();You can also remove all models matching a certain criteria:
await Post.remove({ title: 'New title' });Queries
Find all
To fetch all models find() or all() can be used (they're identical):
Post.find();
Post.all();Find one
Post.findOne({ title: 'New title' });Find by ID
Post.findById('56c9e0922cc9215110ab26dc');Find where value equals
Post.where('title', 'New title').find();
Post.where('author.name', 'Emma').find();Find where value matches a regular expression
Post.where('title', /something/i).find();Find where attribute exists
Post.exists('title').find();Find where value is less/greater than
Post.where('comments_number').lt(5).find(); // less than 5
Post.where('comments_number').lte(5).find(); // less than or equal 5
Post.where('comments_number').gt(5).find(); // greater than 5
Post.where('comments_number').gte(5).find(); // greater than or equal 5Find where value is one of
Post.in('comments_number', [4, 8]).find();Find using OR
Find all models where title equals either "First" or "Second":
Post.or({ title: 'First' }, { title: 'Second' }).find();Find and modify
Update and retrieve the contents for one single document:
Post.findAndModify({ 'title': 'Unknown' }, [['_id', 'asc']], { '$set': { 'title': 'Found and modified!' } }, { 'new': true });Limit results
Post.limit(10).find();Skip results
Skip first N results:
Post.skip(4).find();Sort results
// descending
Post.sort('comments_number', -1);
// ascending
Post.sort('comments_number', 1);Count results
Count all documents in collection:
Post.count();Count all documents matching a certain criteria:
Post.count({ awesome: true });Tests
$ npm testLicense
Mongoritwo is released under the MIT License.