比方說,我建立一個社區博客引擎:貓鼬 - 對象
- 我們有幾類
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