我正在编写一个跟踪成员及其认证的应用程序。每个成员都有一些引用其他模型的数组,如Mongoose 人口文档中所述。
Member
图式
{
name: {
first: String,
last: String
},
unit: Number,
// more stuff
class_year: Number,
campus_box: String,
campus_address: String,
// more stuff
emails: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Email' }],
certifications: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Certification' }],
service_credits: [{ type: mongoose.Schema.Types.ObjectId, ref: 'ServiceCredit' }]
}
Certification
图式
{
type: String,
issue: Date,
expiry: Date,
number: String,
_member: { type: mongoose.Schema.Types.ObjectId, ref: 'Member' }
}
Email
和的模式ServiceCredit
相似,因为它们都具有_member
字段。
当我创建一个Email
时,它被添加到Email
模型中,然后我可以执行
var Email = mongoose.model('Email');
Email.findOne().populate('_member').exec(function (err, email) {
console.log(email._member.name.first);
});
但是,它没有添加到Member
架构中的数组中,因为当我运行时
var Member = mongoose.model('Member');
Member.findOne().populate('emails').exec(function (err, member) {
res.json(200, member);
});
emails: []
当显然Email
与该成员相关联时,我会进入 JSON。
我已经阅读了需要填充文档本身的 Mongoose API,因此我正在尝试使用以下内容执行http://mongoosejs.com/docs/api.html#document_Document-populate中引用的内容:
var Member = mongoose.model('Member');
Member.findOne({ _id: req.session.member._id }, function (err, member) {
member.populate('emails', function (err) {
console.log('populated emails');
});
});
但我得到错误:(member's JSON data) has no method 'populate'
。我知道我试图populate
在错误的事情上运行,但我无法弄清楚正确的方法是什么。