hata-mongoose-deep-populate
v1.0.0
Published
A modification of mongoose-deep-populate plugin for working with multiple databases.
Readme
Mongoose plugin to enable population of nested models at any level of depth. Support Mongoose 3.8.x and later. Refer to changelog for breaking changes. (https://www.npmjs.com/package/mongoose-deep-populate)
Usage
Sample usages are based on the following schemas:
var UserSchema = new Schema({})
var CommentSchema = new Schema({
user : {type: Number, ref: 'User'}
})
var PostSchema = new Schema({
user : {type: Number, ref: 'User'},
comments: [{type: Number, ref: 'Comment'}],
likes : [{user: {type: Number, ref: 'User'}}],
approved: {status: Boolean, user: {type: Number, ref: 'User'}}
})Register plugin
// CHANGE from 1.x: need to pass in mongoose instance
var deepPopulate = require('hata-mongoose-deep-populate')(mongoose);
PostSchema.plugin(deepPopulate, options /* more on options below */);Perform population
On Post model:
// Use callback
Post.deepPopulate(posts, [{path: 'comments.user', model: [Comment.getModel(id), Usere.getModel(id)]}], function (err, _posts) {
// _posts is the same instance as posts and provided for convenience
posts.forEach(function (post) {
// post.comments and post.comments.user are fully populated
});
});
// Use promise
Post.deepPopulate(posts, [{path: 'comments.user', model: [Comment.getModel(id), User.getModel(id)]}]).then(...);On an instance of Post:
// Use callback
post.deepPopulate([{path: 'comments.user', model: [Comment.getModel(id), User.getModel(id)]}], function (err, _post) {
// _post is the same instance as post and provided for convenience
});
// Use promise
post.deepPopulate([{path: 'comments.user', model: [Comment.getModel(id), User.getModel(id)]}]).then(...);On Query (returns the same query object to chain):
Post.find().deepPopulate([{path: 'comments.user', model: [Comment.getModel(id), User.getModel(id)]}]).exec(function (err, posts) { ... });
Post.findOne().deepPopulate([{path: 'comments.user', model: [Comment.getModel(id), User.getModel(id)]}]).exec(function (err, post) { ... });
Post.findById(id).deepPopulate([{path: 'comments.user', model: [Comment.getModel(id), User.getModel(id)]}]).exec(function (err, post) { ... });Populate multiple paths
post.deepPopulate([{path: 'user', model: [User.getModel(id)]}, {path: 'comments.user', model: [Comment.getModel(id), User.getModel(id)]}, {path: 'likes.user', model: [null, User.getModel(id)]}, {path: 'approved.user', model: [null, User.getModel(id)]}], cb);Test
The test suite will drop the database each run, so only run it against a test database. To run tests, execute this command where --db is the connection string.
gulp test --db mongodb://127.0.0.1/mongoose_deep_populate_test_dbChangelog
v0.0.1
- Initial release
License
MIT
