假设我正在构建一个社区博客引擎:
Category
Blog
Post
Account
Category
可能包含多个Blog
的Blog
可能包含在多个Category
的Blog
可能包含多个Post
的Post
可能包含在多个Blog
的Account
可能是多个owner
的{{1}}和editor
。这就是为什么它可能包含Blog
和Blog
字段中几个owner
的ObjectID数组。editor
可能由多个Blog
拥有和编辑。这就是为什么它可能包含Account
和Account
字段中几个owner
的ObjectID数组。这是一个架构:
editor
每个帖子还可能包含可能仅与此对象相关的赞,评论和其他对象。
问题是当我尝试添加新的categorySchema = mongoose.Schema(
title: String
blogs: [
type: ObjectId
ref: "Blog"
]
)
blogSchema = mongoose.Schema(
title: String
description: String
owner:
type: ObjectId
ref: "Account"
editor: [
type: ObjectId
ref: "Account"
]
category: [
type: ObjectId
ref: "Category"
]
posts: [
type: ObjectId
ref: "Post"
]
)
postSchema = mongoose.Schema(
blogs: [
type: ObjectId
ref: "Blog"
]
author:
type: ObjectId
ref: "Account"
)
accountSchema = mongoose.Schema(
name: String
owner: [
type: ObjectId
ref: "Blog"
]
editor: [
type: ObjectId
ref: "Blog"
]
)
时,我将需要管理许多集合中的很多字段。同样的事情是当我编辑Blog
或删除时 - 我必须在很多对象中的各种数组字段中查找,检查,修改/删除大量记录。
我是suggested,我不应该存储直接关系(类别 - >博客,博客 - >帖子),只能反向关系(博客 - >分类,帖子 - >博客),当我需要获取某个类别中的所有博客时,请执行一个简单的Blog
,但想想如果我需要一些深请求,例如Blogs.find({category: cat_id})
将会是什么。假设可能有很多博客,每个博客都可能包含很多onwers和edtiors,直接Get all Blogs where account_ID both owner and editor
会更快。这就是为什么我认为我需要双向链接。
所以,我的问题是:
也许我应该在Mongoose中使用某种多对多的关系?
谢谢!
答案 0 :(得分:0)
不,你不需要双向链接。
你需要的只是
Blog->Category
Blog->Editors
Blog->Owners
Post->Blog
因为您的类别和用户永远不会更改对象ID,所以您不必担心更新博客内的引用。此外,如果要删除博客,请不要删除记录。而是添加一个标记,将博客标记为已删除。当您显示内容时,只需检查相应博客的删除标记,甚至为查询添加条件以完全避免这些结果。 (这也有保留历史的好处)
总而言之,您可以只将更具体和可更改的内容链接到更静态的内容,而不是创建双向链接。要删除记录,您可以添加删除标记,也不用担心追踪记录,或者您可以选择所有有问题的blog_id的帖子并先删除它们。