如何填充与猫鼬对象数组
我在猫鼬下面的模式:
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) { .... }
这和各种尝试与填入参数要么不填充字段或不返回任何数据。
我究竟做错了什么?
回答如下:您已经定义的模式,而不是模型。该_codes
有一个裁判模型Codes
但它并不存在。当你调用.populate
与第一两个参数它假定模型是Codes
(从参考抽放)
为了解决这个问题,你需要添加:
mongoose.model('Codes', codesSchema);
mongoose.model('Documents', documentsSchema);
也许你需要做Users
相同
见populate
here完整的文档
附:的建议:如果要定义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: ...}
});
如何填充与猫鼬对象数组
我在猫鼬下面的模式:
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) { .... }
这和各种尝试与填入参数要么不填充字段或不返回任何数据。
我究竟做错了什么?
回答如下:您已经定义的模式,而不是模型。该_codes
有一个裁判模型Codes
但它并不存在。当你调用.populate
与第一两个参数它假定模型是Codes
(从参考抽放)
为了解决这个问题,你需要添加:
mongoose.model('Codes', codesSchema);
mongoose.model('Documents', documentsSchema);
也许你需要做Users
相同
见populate
here完整的文档
附:的建议:如果要定义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: ...}
});