** Я ответил ниже. Короче говоря, вам нужно указать модель в модуле, в котором вы хотите заполнить, даже если вы не ссылаетесь на нее напрямую.
У меня странная проблема с mongoose при заполнении только одного конкретного массива идентификаторов.
У меня есть три модели: пользователь, компания и виджеты.
Когда я возвращаюсь в компанию, заполненную пользователями, все в порядке, используя:
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"
}
Вот модели:
USER:
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);
WIDGET:
const WidgetSchema = new Schema({
title: {
type: String,
required: true
},
maker: String
});
const Widget = mongoose.model('widget', WidgetSchema);
Я вручную проверил _ids в массиве виджетов модели компании, и все они верны.