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)
Had this issue myself. The deepPopulate plugin integrates itself into the methods of the Model. Hence calling it after
will solve your problem. If you call it first, the deepPopulate method will get overwritten…