**DEPRECATED** kriskowal's Q support for mongoose
DEPRECATED [ES6 Promise is supported]((http://mongoosejs.com/docs/harmony.html) by mongoose officially.
kriskowal's Q support for mongoose.
for mongodb native nodejs driver, see mongo-q.
var mongoose = require('mongoose-q')(require('mongoose')); // verbose way: mongooseQ is unused var mongoose = require('mongoose'), mongooseQ = require('mongoose-q')(mongoose) // shortest way: mongoose will be loaded by mongoose-q var mongoose = require('mongoose-q')();
// to use bluebird var mongoose = require('mongoose-q')(require('mongoose'), {q:require('q-bluebird')});
modelstatics:
SomeModel.findByIdQ(....blahblah...) .then(function (result) { ... }) .catch(function (err) { ... }) .done();
modelmethods:
var someModel = new SomeModel(...); someModel.populateQ() .then(function (result) { ... }) .catch(function (err) { ... }) .done();
querymethods:
SomeModel.find(...).where(...).skip(...).limit(...).sort(...).populate(...) .execQ() // no 'Q' suffix for Query methods except for execQ() .then(function (result) { ... }) .catch(function (err) { ... }) .done();
aggregatemethods:
SomeModel.aggregate(...).project(...).group(...).match(...).skip(...).limit(...).sort(...).unwind(...) .execQ() // no 'Q' suffix for Aggregate methods except for execQ() .then(function (result) { ... }) .catch(function (err) { ... }) .done();
suffix/
prefix:
var mongoose = require('mongoose-q')(require('mongoose'), {prefix:'promiseOf_', suffix:'_withQ'}); SomeModel.promiseOf_findAndUpdate_withQ(...) .then(function (result) { ... }) .catch(function (err) { ... }) .done();
mapper:
function customMapper(name) { return 'q' + name.charAt(0).toUpperCase() + name.substring(1); } var mongoose = require('mongoose-q')(require('mongoose'), {mapper:customMapper}); SomeModel.qFindAndUpdate(...) .then(function (result) { ... }) .catch(function (err) { ... }) .done();
spread:
NOTE: since mongoose 4.x: no spread for update()!
NOTE: without
spreadoption(by default), you can access only the first result withthen!!
var mongoose = require('mongoose-q')(require('mongoose'), {spread:true}); SomeModel.createQ(doc1, doc2, ...) .spread(function (saved1, saved2, ...) { ... }) .catch(function (err) { ... }) .done(); SomeModel.createQ(doc1, doc2, ...) .then(function (result) { var saved1 = result[0], raw = saved1[1]; ... }) .catch(function (err) { ... }) .done(); ... var model = new SomeModel(); ... model.saveQ() .spread(function (savedDoc, affectedRows) { ... }) .catch(function (err) { ... }) .done(); ... model.saveQ() .then(function (result) { var savedDoc = result[0], affectedRows = result[1]; ... }) .catch(function (err) { ... }) .done();
NOTE: this is not a feature of mongoose-q
SomeSchema.statics.findByName = function (name) { return this.findQ({name: name}); // NOTE: returns Promise object. }; ... var SomeModel = mongoose.model('Some', SomeSchema); SomeModel.findByName('foo').then(function(result) { console.log(result); });
That's all folks!