比方说,我建立一个社区博客引擎:猫鼬 - 对象
- 我们有几类
Category
- 我们有许多博客
Blog
- 我们有很多帖子
Post
- 我们可能有作者
Account
- 每个
Category
可能包含几个Blog
的 - 每
Blog
可以包含在几个Category
的 - 每
Blog
可能包含几个Post
的 - 每
Post
可以包含在几个Blog
的 - 每
Account
可以既是owner
和editor
的几个Blog
的。这就是为什么它可能在owner
和editor
字段中包含几个Blog
的ObjectID的数组。 - 每个
Blog
可能由几个Account
的拥有和编辑。这就是为什么它可能包含owner
和editor
字段中几个Account
的ObjectID的数组。
这里有一个模式:
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
时,我将不得不在许多集合中管理很多字段。同样的事情是当我编辑Blog
或删除 - 我必须找到,检查,修改/删除很多对象中的各种数组字段中的很多记录。
我suggested,我不应该存储直接关系(分类 - >博客,博客 - >主题),只有反向关系(博客 - > Categores,帖子 - >博客),当我需要获得某些类别的所有博客,执行一个简单的Blogs.find({category: cat_id})
,但想一下如果我需要一些深的请求,如Get all Blogs where account_ID both owner and editor
。假设事实上可能有很多博客,并且每个博客可能包含很多歌曲和edtiors,直接Blog.find {owner:acc_id, editor:acc_id}
将会更快。那为什么我认为我需要双向链接。
所以,我的问题是:
- 我真的需要对象之间的2-定向链接?
- 如果是,是否有任何工具可以优化使用它?
也许我应该在Mongoose中使用某种多对多的关系?
谢谢!
在我看来,你想建立对象之间的关系。请问为什么选择mongoDB?它的重点在于它是一个noSQL db。这意味着当你开始开发一个mongoDB应用程序时,你应该改变你的思维方式。你需要思考的不是关系,而是关于文章。每篇文章都应该完整。一旦你开始设计关系,你打破了NoSQL模型,你会讨厌mongoDB。你会认为这是最糟糕的,而事实并非如此。所以我会说找出你的设计,然后决定一个数据库。 – Zee