NodeJS + Mongoose:MissingSchemaError:模式尚未注册模型“类别”
Posted
技术标签:
【中文标题】NodeJS + Mongoose:MissingSchemaError:模式尚未注册模型“类别”【英文标题】:NodeJS+Mongoose: MissingSchemaError: Schema hasn't been registered for model "Category" 【发布时间】:2019-02-13 18:16:33 【问题描述】:我正在尝试构建一个简单的博客,其中包含帖子和类别。文章当前可以添加到父类别中(将来可能会添加到多个类别中)。一个类别有很多文章。这是我想出的:
Category.js:
const CategorySchema = new Schema(
name:
type: String,
required: true,
trim: true
,
user: // I wanted to know what user created the category
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
,
timestamps: true
);
const Category = mongoose.model('categories', CategorySchema);
module.exports = Category;
Article.js:
const ArticleSchema = new Schema(
name:
type: String,
required: true,
trim: true
,
article_body:
type: String,
trim: true
,
userId:
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
,
categoryId:
type: mongoose.Schema.Types.ObjectId,
ref: 'Category'
,
timestamps: true
);
const Article = mongoose.model('articles', ArticleSchema);
module.exports = Article;
当我尝试加载带有类别名称/详细信息的文章时:
Article.find().populate('categoryId').sort('name').exec(function(err, articles)
if(err) throw err;
res.send(JSON.stringify(articles));
);
我收到此错误:
MissingSchemaError: Schema hasn't been registered for model "Category".
Use mongoose.model(name, schema)
我是 NoSQL 的新手,所以我什至不确定这个模型结构是否适合我的情况(如果使用子/嵌入文档不是更好的话)。数据(文章)将被访问者阅读,访问者可以按类别过滤文章。
【问题讨论】:
您能否尝试在您的Category.js
文件末尾添加module.exports = Category;
。
你为什么这样做:const Article = mongoose.model('articles', EventSchema);
而不是const Article = mongoose.model('articles', ArticleSchema);
?你可以试试ref: 'categories'
。
@BrijeshShah 在那里,复制代码时出错。
@LucasCosta 复制代码时出错,已更正。当我尝试添加 ref: 'categories
时,我收到此错误(来自 JSX 代码):Objects are not valid as a React child (found: object with keys _id, name, createdAt, updatedAt, __v). If you meant to render a collection of children, use an array instead.
I was able to solve this problem by following this answer: https://***.com/questions/18001478/referencing-another-schema-in-mongoose
【参考方案1】:
const Category = mongoose.model('categories', CategorySchema);
上面一行说猫鼬你要声明的模型名称为categories
categoryId:
type: mongoose.Schema.Types.ObjectId,
ref: 'Category' // this name does not match to 'categories'
这里你说categoryId
引用Category
模型!
所以问题在于您的模型名称声明。您应该在两行中使用相同的名称。
【讨论】:
嗨@hvish,谢谢你的回答。如果我将const Category = mongoose.model('categories', CategorySchema);
行更改为const Category = mongoose.model('Category', CategorySchema);
并加载数据(Article().populate('Category').sort('name').exec(function(err, events) ...
),则不会发生任何事情。我正在尝试将类别名称打印为article.categoryId ? article.categoryId.name : 'no category'
。以上是关于NodeJS + Mongoose:MissingSchemaError:模式尚未注册模型“类别”的主要内容,如果未能解决你的问题,请参考以下文章