Mongolass——一个像 mongoose 的 MongoDB 驱动库
发布于 16 天前 作者 nswbmw 211 次浏览 来自 分享

Mongolass

NPM version Build status Dependency Status License Downloads

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:

  1. Elegant connection. eg:

    mongodb

    MongoClient.connect(..., function(err, db) {
      db.listCollections()
    })
    

    Mongolass

    mongolass.connect(...)
    mongolass.listCollections()
    
  2. Optional schema, only used for parameter validation before insert document to mongodb.

  3. 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

回到顶部