mongoose-q

by iolo

**DEPRECATED** kriskowal's Q support for mongoose

126 Stars 25 Forks Last release: Not found 50 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

mongoose-q

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.

usage

to apply Q with default suffix '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 apply another Q implementation(since v0.0.15):

// to use bluebird
var mongoose = require('mongoose-q')(require('mongoose'), {q:require('q-bluebird')});

use Q-applied
model
statics:

SomeModel.findByIdQ(....blahblah...)
  .then(function (result) { ... })
  .catch(function (err) { ... })
  .done();

use Q-applied
model
methods:

var someModel = new SomeModel(...);
someModel.populateQ()
  .then(function (result) { ... })
  .catch(function (err) { ... })
  .done();

use Q-applied
query
methods:

SomeModel.find(...).where(...).skip(...).limit(...).sort(...).populate(...)
  .execQ() // no 'Q' suffix for Query methods except for execQ()
  .then(function (result) { ... })
  .catch(function (err) { ... })
  .done();

use Q-applied
aggregate
methods:

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();

to apply Q with custom
suffix
/
prefix
:

var mongoose = require('mongoose-q')(require('mongoose'), {prefix:'promiseOf_', suffix:'_withQ'});
SomeModel.promiseOf_findAndUpdate_withQ(...)
  .then(function (result) { ... })
  .catch(function (err) { ... })
  .done();

to apply Q with custom name
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();

DEPRECATED to apply Q with
spread
:

NOTE: since mongoose 4.x: no spread for update()!

NOTE: without

spread
option(by default), you can access only the first result with
then
!!
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();

to define custom statics/instance methods using Q

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!

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.