mongoose-deep-populate: Cannot populate nested parent model

Hello,

I am trying to use mongoose-deep-populate, but got this error

Error: Plugin was not installed
    at Query.deepPopulate (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/mongoose-deep-populate/lib/plugin.js:16:61)
    at Object.exports.show [as handle] (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/server/api/user/user.controller.js:45:5)
    at next_layer (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/route.js:103:13)
    at Route.dispatch (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/route.js:107:5)
    at c (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/index.js:195:24)
    at param (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/index.js:268:14)
    at param (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/index.js:280:16)
    at Function.proto.process_params (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/index.js:296:3)
    at next (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/index.js:189:19)
    at next (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/index.js:166:38)
    at next (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/index.js:166:38)
    at next_layer (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/route.js:77:14)
    at next_layer (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/route.js:81:14)
    at next_layer (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/route.js:81:14)
    at Route.dispatch (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/route.js:107:5)
    at c (/Users/christianmsakai/Desktop/Baby Mart/ninthbeat/node_modules/express/lib/router/index.js:195:24)

My code is

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var crypto = require('crypto');
var _ = require('lodash');
var extend = require('mongoose-schema-extend');
var deepPopulate = require('mongoose-deep-populate');
var authTypes = ['facebook', 'google', 'twitter'];

// User Schema
var UserSchema = new Schema({
  userName: { type: String, trim: true },
  items: [{ type: Schema.Types.ObjectId, ref: 'Item' }],
});

/**
 * Plugins
 */
UserSchema.plugin(deepPopulate);
exports.show = function (req, res, next) {
  var userId = req.params.id;

  User
    .findById(userId)
    .deepPopulate('items.seller')
    .exec(function (err, user) {
    if (err) return next(err);
    if (!user) return res.send(401);
    res.json(user.profile);
  });
};
'use strict';

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var ItemSchema = new Schema({
    seller: { type: Schema.Types.ObjectId, ref: 'User' },
    type: String,
  title:  { type: String, trim: true },
    condition: String,
  description: { type: String, trim: true },
  price: Number,
  imageUrls: [String],
  userLikes: [{ type: Schema.Types.ObjectId, ref: 'User' }],
  createdAt: { type: Date, default: Date.now }
});

module.exports = mongoose.model('Item', ItemSchema);

Any ideas?

About this issue

  • Original URL
  • State: closed
  • Created 9 years ago
  • Reactions: 1
  • Comments: 20 (5 by maintainers)

Most upvoted comments

Had this issue myself. The deepPopulate plugin integrates itself into the methods of the Model. Hence calling it after

userSchema.methods = {
 ...
};

will solve your problem. If you call it first, the deepPopulate method will get overwritten…