Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
@epicfaace/mongoose-deep-populate
Advanced tools
Mongoose plugin to enable deep population of nested models
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.
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'}}
})
// CHANGE from 1.x: need to pass in mongoose instance
var deepPopulate = require('mongoose-deep-populate')(mongoose);
PostSchema.plugin(deepPopulate, options /* more on options below */);
On Post
model:
// Use callback
Post.deepPopulate(posts, 'comments.user', 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, 'comments.user').then(...);
On an instance of Post
:
// Use callback
post.deepPopulate('comments.user', function (err, _post) {
// _post is the same instance as post and provided for convenience
});
// Use promise
post.deepPopulate('comments.user').then(...);
On Query
(returns the same query object to chain):
Post.find().deepPopulate('comments.user').exec(function (err, posts) { ... });
Post.findOne().deepPopulate('comments.user').exec(function (err, post) { ... });
Post.findById(id).deepPopulate('comments.user').exec(function (err, post) { ... });
Pass paths in a space- or comma-delimited string:
post.deepPopulate('user comments.user likes.user approved.user', cb);
Or use an array of strings:
post.deepPopulate(['comments.user', 'user', 'likes.user', 'approved.user'], cb);
Specify whitelist
option to ensure only certain paths can be populated. This is to prevent potential performance and security issues if you allow API clients to supply population paths.
PostSchema.plugin(deepPopulate, {
whitelist: [
'user',
'comments.user'
]
});
Use the populate
option to supply paths with corresponding Mongoose populate options.
PostSchema.plugin(deepPopulate, {
populate: {
'comments.user': {
select: 'name',
options: {
limit: 5
}
},
'approved.user': {
select: 'name'
}
}
});
Use rewrite
option to rewrite provided paths as well as paths in whitelist
and populate
. This is useful when you allow API clients to supply population paths (e.g. via query string) and want to make these paths more user-friendly. For example:
PostSchema.plugin(deepPopulate, {
rewrite: {
author: 'user',
approver: 'approved.user'
}
});
// assume the query string is: ?populate=author,approver
post.deepPopulate(req.query.populate, cb);
You can override the above plugin options when invoking deepPopulate
.
Post.deepPopulate(posts, paths, {
whitelist: [],
populate: {},
rewrite: {}
}, cb)
post.deepPopulate(paths, {
whitelist: [],
populate: {},
rewrite: {}
}, cb);
Post.find({}).deepPopulate(paths, {
whitelist: [],
populate: {},
rewrite: {}
}).exec(cb)
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_db
deepPopulate()
on model or model instance.require
lean
to populated documentsrewrites
to whitelist
and populate
deepPopulate
to Query
MIT
FAQs
Mongoose plugin to enable deep population of nested models
We found that @epicfaace/mongoose-deep-populate demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.