**我已在下面回答。简而言之,即使您没有直接引用该模型,也需要在希望填充的模块中提供模型。
仅填充一个特定ID数组时,猫鼬遇到了一个奇怪的问题。
我有三种模型,用户,公司和小部件。
当我返回时,使用以下命令填充所有用户的公司都很好:
Company.findOne({ name: 'xyz' })
.populate('users')
.exec(function(err, company) {
if (err) return res.send(err)
res.send(company)
})
但是,当我尝试将“用户”替换为“小部件”时,出现以下错误:
{
"message": "Schema hasn't been registered for model \"widget\".\nUse mongoose.model(name, schema)",
"name": "MissingSchemaError"
}
以下是模型:
用户:
const UserSchema = new Schema({
name: String,
email: {
type: String,
unique: true,
required: true
},
password: {
type: String,
required: true
},
company: {
type: Schema.Types.ObjectId,
ref: 'company'
}
});
const User = mongoose.model("user", UserSchema);
公司:
const CompanySchema = new Schema({
name: String,
URL: {
type: String,
unique: true
},
users: [{
type: Schema.Types.ObjectId,
ref: 'user'
}],
widgets: [{
type: Schema.Types.ObjectId,
ref: 'widget'
}]
});
const Company = mongoose.model('company', CompanySchema);
小部件:
const WidgetSchema = new Schema({
title: {
type: String,
required: true
},
maker: String
});
const Widget = mongoose.model('widget', WidgetSchema);
我已经手动检查了公司模型的小部件数组中的_id,它们都是正确的。
答案 0 :(得分:0)
好的,所以这代表我缺乏理解。
在我使用的模块中:
Company.findOne({ name: 'xyz' })
.populate('users')
.exec(function(err, company) {
if (err) return res.send(err)
res.send(company)
})
我已将用户模型导入模块中的其他用途。但是,由于我没有直接提到Widget,所以没有导入它。经过更多研究,我发现即使不直接引用它,也需要在填充时导入模型。
让我知道是否最好删除整个线程或留作参考。