类别和子类别架构设计
Category and Subcategory Schema design
所以基本上它是针对博客 posts 及其类别和子类别的。博客 post 可以有多个类别,每个类别可以有多个子类别(基于 post)。
例如,假设我有两个 post,Post 1 和 Post 2。Post 1 属于动机和旅程类别。根据 Post 1 的内容,动机可以有子类别,例如成功和金钱。
同样,Post 2 可以属于“教育”和“旅行”类别。教育有一个子类别知识和旅程有一个子类别称为成功。
我已经设计了 Post 和类别模式,但我在使用子类别模式时遇到了困难。
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 架构中,那么我将无法 link 带有类别的子类别,因为每个类别都会有基于 post 的不同子类别。
如果我将子类别引用放在类别模式中,那也是不可行的,因为一个类别可以在多个 post 中。
或者我应该在子类别架构中放置 Post 参考和类别参考吗?
请建议我最好的方法。
对于这样的用例,我会做这样的事情 -
Collection 1 - Post
post : string
Collection 2 - 类别
name : string
count : number
Collection 3 - 子类别
categoryId : ObjectId // FK to category
name : string
Collection 4 - Post类别
postId : ObjectId // FK to post
categoryId : ObjectId // FK to category
subCategories : [ (ObjectId) ] // array of sub-categories, pointing to sub-category
数据库设计主要取决于您的用例。如果您只想查看每个 post 的计数,您可以将类别和 sub-category 关系存储在一个数组中(在 Post 类别 collection 中)
PostCategories,这里我已经提到了,如果你想根据categoryId进行搜索(如果想在[=42]上显示与某个类别相关的posts,可以使用=],您可以在 categoryId 上建立索引,这将是最快的方法)
如果您也想基于 sub-category 进行搜索,您可以修改 Post 类别 table 以具有 many-to-many 关系。
postId : ObjectId // FK to post
categoryId : ObjectId // FK to category
subCategories : ObjectId // FK to sub-category
所以基本上它是针对博客 posts 及其类别和子类别的。博客 post 可以有多个类别,每个类别可以有多个子类别(基于 post)。
例如,假设我有两个 post,Post 1 和 Post 2。Post 1 属于动机和旅程类别。根据 Post 1 的内容,动机可以有子类别,例如成功和金钱。
同样,Post 2 可以属于“教育”和“旅行”类别。教育有一个子类别知识和旅程有一个子类别称为成功。
我已经设计了 Post 和类别模式,但我在使用子类别模式时遇到了困难。
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 架构中,那么我将无法 link 带有类别的子类别,因为每个类别都会有基于 post 的不同子类别。
如果我将子类别引用放在类别模式中,那也是不可行的,因为一个类别可以在多个 post 中。
或者我应该在子类别架构中放置 Post 参考和类别参考吗?
请建议我最好的方法。
对于这样的用例,我会做这样的事情 -
Collection 1 - Post
post : string
Collection 2 - 类别
name : string
count : number
Collection 3 - 子类别
categoryId : ObjectId // FK to category
name : string
Collection 4 - Post类别
postId : ObjectId // FK to post
categoryId : ObjectId // FK to category
subCategories : [ (ObjectId) ] // array of sub-categories, pointing to sub-category
数据库设计主要取决于您的用例。如果您只想查看每个 post 的计数,您可以将类别和 sub-category 关系存储在一个数组中(在 Post 类别 collection 中)
PostCategories,这里我已经提到了,如果你想根据categoryId进行搜索(如果想在[=42]上显示与某个类别相关的posts,可以使用=],您可以在 categoryId 上建立索引,这将是最快的方法)
如果您也想基于 sub-category 进行搜索,您可以修改 Post 类别 table 以具有 many-to-many 关系。
postId : ObjectId // FK to post
categoryId : ObjectId // FK to category
subCategories : ObjectId // FK to sub-category