Mongolass
Elegant MongoDB driver for Node.js.
Installation
$ npm i mongolass --save
Introduction
Just like mongoose:
'use strict';
let Mongolass = require('mongolass');
let mongolass = new Mongolass();// let mongolass = new Mongolass('mongodb://localhost:27017/test');
mongolass.connect('mongodb://localhost:27017/test');
let User = mongolass.model('User');
User
.find()
.select({ name: 1, age: 1 })
.sort({ name: -1 })
.exec()
.then(console.log)
.catch(console.error);
or use optional schema:
'use strict';
let Mongolass = require('mongolass');
let Schema = Mongolass.Schema;
let mongolass = new Mongolass();
mongolass.connect('mongodb://localhost:27017/test');
let UserSchema = new Schema('UserSchema', {
name: { type: 'string' },
age: { type: 'number' }
});
let User = mongolass.model('User', UserSchema);
User
.insertOne({ name: 'nswbmw', age: 'wrong age' })
.exec()
.then(console.log)
.catch(console.error);
What about Mongolass
Mongolass retains the api of node-mongodb-native, and draws useful features of mongoose. Compared with node-mongodb-native, Mongolass has following three features:
- Elegant connection. eg:
** mongodb **
MongoClient.connect(..., function(err, db) {
db.listCollections()
})
** Mongolass **
mongolass.connect(...)
mongolass.listCollections()
- Optional schema, only used for parameter validation before insert document to mongodb.
- Awesome plugin system. eg:
beforeInsert
, afterFind
and so on.
Schema
see another-json-schema.
Plugins
Mongolass has some built-in plugins, only for find
and findOne
.
Register plugin
mongolass.plugin(pluginName, hooks);// register global plugin
User.plugin(pluginName, hooks);// register model plugin
examples:
User.plugin('mw2', {
beforeInsert: function (...args) {
},
afterFind: function* (result, ...args) {
console.log(result, args);
...
}
});
mongolass.plugin('mw1', {
beforeFind: function (...args) {
console.log(ctx._op);
console.log(ctx._args);
console.log(args);
...
}
});
yield User.find().mw1().mw2().exec()// equal: yield User.find().mw1().mw2()
User.find().mw2().mw1().exec().then(...).catch(...)
User.find().mw1().mw2().exec(function (err, res) {
console.log(err, res)
})
** NOTE**: Different order of calling plugins will output different results.
Test
$ npm test (coverage 100%)
License
MIT