基本上它是用于博客文章及其分类和子分类的。一篇博客文章可以有多个类别,每个类别可以有多个子类别(基于文章)。
例如,假设我有两个帖子,帖子1和帖子2。帖子1分为动机类和旅程类。根据第一篇文章的内容,动机可以分为成功和金钱等子类别。
同样,Post 2也可以放在教育和旅行类别中。教育有一个子类别,知识有一个子类别,旅行有一个子类别,叫做成功。
我已经设计了Post和Category模式,但是我对Subcategory模式有困难。
Post模式是这样的:
const postSchema = new mongoose.Schema( {
post: {
type: String,
required: true,
trim: true
},
category: [ {
_id: false,
categoryID: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'Category'
}
} ]
});
这是类别模式:
const categorySchema = new mongoose.Schema( {
catName: {
type: String,
required: true
},
count: {
type: Number,
default: 0
}
});
*******COUNT field shows the total number of posts that have that specific category.
For example, Motivation category could be in 100 posts.*******
所以我的问题是,我如何为子类别编写模式?
如果我将子类别引用放在Post schema中,那么我将无法将子类别与类别链接起来,因为每个类别将基于Post有不同的子类别。
如果我将子类别引用放在类别模式中,那么这也是不可行的,因为一个类别可以在多个帖子中。
或者我应该把Post引用和Category引用放在Subcategory schema中吗?
请告诉我做这件事的最好方法。
对于这样的用例,我会这样做-
Collection 1 - Post
post : string
集合2 -类别
name : string
count : number
集合3 -子类别
categoryId : ObjectId // FK to category
name : string
Collection 4 - PostCategories
postId : ObjectId // FK to post
categoryId : ObjectId // FK to category
subCategories : [ (ObjectId) ] // array of sub-categories, pointing to sub-category
数据库设计主要取决于您的用例。如果您只想查看每篇文章的计数,您可以将类别和子类别关系存储在单个数组中(在PostCategories集合中)
PostCategories,我在这里提到的,可以使用,如果你想基于categoryId搜索(如果想在UI上显示与一个类别相关的帖子,你可以在categoryId上有一个索引,这将是最快的方法)
如果你想搜索甚至基于子类别,你可以修改PostCategories表,使其具有多对多关系。
postId : ObjectId // FK to post
categoryId : ObjectId // FK to category
subCategories : ObjectId // FK to sub-category