Nearly-Pickled Module

    hata-mongoose-deep-populate

    1.0.0 • Public • Published

    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_db
    

    Changelog

    v0.0.1

    • Initial release

    License

    MIT

    Install

    npm i hata-mongoose-deep-populate

    DownloadsWeekly Downloads

    2

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    34.3 kB

    Total Files

    10

    Last publish

    Collaborators

    • harshad1011