类别和子类别模式设计



基本上它是用于博客文章及其分类和子分类的。一篇博客文章可以有多个类别,每个类别可以有多个子类别(基于文章)。

例如,假设我有两个帖子,帖子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

相关内容

  • 没有找到相关文章

最新更新