mongoomise
promisify mongoose by any promise library
Support List
Default Usage
var mongoose = // load your models firstvar User = mongoose//... // choose your fav library// require('mongoomise').promisifyAll(mongoose, require('q'))// require('mongoomise').promisifyAll(mongoose, require('rsvp'))// require('mongoomise').promisifyAll(mongoose, require('when'))// require('mongoomise').promisifyAll(mongoose, require('es6-promise')) // start flyingUser
Multipe Connections
var mongoose = var mongoomise = var connection = mongoose //load modelsvar User = connectionvar UserX = mongoose//... //just promisify the connection, the mongoose will be auto promisifiedmongoomise // start flyingUser
Updated
- support promisify connection from
mongoose.createConnection
- add a test for
mongoose.createConnection
- support promisify custom Schema static methods
TODO
- support custom instance methods
Notes
- Do I have to change my existing mongoose related code? No, just follow your old style.
- Does hooks like Schema.pre work as usual? Yes. some useful discussion here
- Does it support custom model static method? Yes!
- mongoomise.promisifyAll should be invoked
after
all models areloaded
mongoose basics
- your models extends from mongoose.Model
- schemas are stored on global mongoose but models may not
- mongoose.models.ModelName equals to mongoose.model('ModelName')
- ModelName.schema equals to mongoose.modelSchemas.ModelName
- static methods should be extended on mongoose.Model with a dynamic context
- instance methods should be extended on mongoose.Model.prototype
- custom model static methods are stored in MyModel.schema.statics
- connection instance store its own models
- it will lookup to mongoose when no models found on connection
Test
mocha ./test/mocha
Benchmark
node benchmark
the benchmark contains:
- bluebird - using bluebird.promisifyAll(mongoose)
- mongoomise/bluebird - using mongoomise with bluebird
- mongoomise/Q - using mongoomise with Q
- mongoomise/RSVP - using mongoomise with RSVP
- mongoomise/when - using mongoomise with when.js
- mongoomise/es6Promise - using mongoomise with es6-promise
in my MacAir, mongoomise/bluebird win the championship.