我在mongoose中有以下模式:
var documentsSchema = new Schema({
"document" : {
"_project" : {
type : Schema.ObjectId,
ref : 'Projects'
},
"_addedBy" : {
type : Schema.ObjectId,
ref : 'Users'
},
"_associateUsers" : [{
type : Schema.ObjectId,
ref : 'Users'
}],
"_codes" : [{
type : Schema.ObjectId,
ref : 'Codes'
}],
"paragraphTitle" : String,
"paragraphText" : String,
"memos" : [
{
"_addedBy" : {
type: Schema.Types.ObjectId,
ref: 'Users'
},
"memoData" : String
}
]}});
和代码:
var codesSchema = new Schema({
"code" : {
"_addedBy" : {
type : Schema.ObjectId,
ref : 'Users'
},
"codeText" : String,
"codeWeight" : Number
}});
我需要填充数组所有元素的_codes.codeText(或代码字段),但看起来我没有正确地执行它。
Documents.find({
"document._project": element._id
}).
populate('document._codes.code','codeText').
exec(function (err, result) { .... }
这和使用populate参数的各种尝试要么不填充字段,要么不返回任何数据。
我做错了什么?
答案 0 :(得分:0)
您已定义架构,但未定义模型。 _codes
对模型Codes
有一个参考,但它不存在。当您使用前两个参数调用.populate
时,它会假定模型为Codes
(从参考中删除)
要解决此问题,玩具需要添加:
mongoose.model('Codes', codesSchema);
mongoose.model('Documents', documentsSchema);
也许你需要对Users
请参阅populate
here
PS 建议:如果您要为codes
定义架构,或者您不需要再次定义对象的名称作为同一架构的一部分,看:
从此
//your style
var catsSchema = new Schema({
"cat" : {
"attr1" : {type: ...},
"attr2" : {type: ...}
}
});
到这个
//obviously attr1 and attr2 are part of cat object/document
var catsSchema = new Schema({
"attr1" : {type: ...},
"attr2" : {type: ...}
});