类别和子类别架构设计

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