Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on May 3, 2023. It is now read-only.

iolo/mongoose-q

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

50 Commits

Repository files navigation

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!

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /