在仅使用一种模型的情况下使用Mongoose填充时缺少MissingSchemaError

时间:2018-11-05 22:39:59

标签: mongodb mongoose mongoose-schema mongoose-populate

**我已在下面回答。简而言之,即使您没有直接引用该模型,也需要在希望填充的模块中提供模型。

仅填充一个特定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,它们都是正确的。

1 个答案:

答案 0 :(得分:0)

好的,所以这代表我缺乏理解。

在我使用的模块中:

Company.findOne({ name: 'xyz' })
    .populate('users')
    .exec(function(err, company) {
    if (err) return res.send(err)
    res.send(company)
    })

我已将用户模型导入模块中的其他用途。但是,由于我没有直接提到Widget,所以没有导入它。经过更多研究,我发现即使不直接引用它,也需要在填充时导入模型。

让我知道是否最好删除整个线程或留作参考。