假设我正在构建一个社区博客引擎:
- 我们有几个类别
Category
- 我们有很多博客
Blog
- 我们有很多帖子
Post
- 我们有可能的作者
Account
- 每个可能包含
Category
几个Blog
- 每一个都可能
Blog
包含在几个Category
- 每个可能包含
Blog
几个Post
- 每一个都可能
Post
包含在几个Blog
- 每一个都
Account
可能是owner
和editor
几个Blog
的。这就是为什么它可能包含多个Blog
's inowner
和editor
字段的 ObjectID 数组。 - 每一个都
Blog
可能被几个Account
's 拥有和编辑。这就是为什么它可能包含多个字段的Account
ObjectIDowner
数组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"
]
)
每个帖子还可能包含喜欢、评论和其他可能仅与此对象相关的对象。
问题是当我尝试添加 new 时Blog
,我将不得不管理许多集合中的许多字段。同样的事情是当我编辑Blog
或删除时——我必须在许多对象的各种数组字段中查找、检查、修改/删除许多记录。
有人建议,我不应该存储直接关系(类别 --> 博客、博客 --> 帖子),只存储反向关系(博客 --> 类别、帖子 --> 博客),以及当我需要获取所有博客时某些类别,执行一个简单的Blogs.find({category: cat_id})
,但如果我需要一些深层请求,比如Get all Blogs where account_ID both owner and editor
. 假设可以有很多博客,并且每个博客都可能包含很多作者和编辑,那么直接Blog.find {owner:acc_id, editor:acc_id}
会更快。这就是为什么我认为我需要双向链接。
所以,我的问题是:
- 我真的需要对象之间的双向链接吗?
- 如果是,是否有任何工具可以优化使用它?
也许我应该在猫鼬中使用某种多对多关系?
谢谢!