コミュニティ ブログ エンジンを構築しているとします。
- いくつかのカテゴリがあります
Category
- 私たちはたくさんのブログを持っています
Blog
- たくさんの投稿があります
Post
- 私たちは多くの著者を持っています
Account
- Everyには複数の
Category
が含まれる場合がありますBlog
- everyは複数の
Blog
に含まれる場合がありますCategory
- Everyには複数の
Blog
が含まれる場合がありますPost
- everyは複数の
Post
に含まれる場合がありますBlog
- everyは、複数の の
Account
両方owner
である場合があります。そのため、およびフィールドに複数の のObjectID の配列が含まれる場合があります。editor
Blog
Blog
owner
editor
- Every
Blog
は、複数の によって所有および編集されている場合がありますAccount
。そのため、およびフィールドに複数Account
の のObjectID の配列が含まれる場合があります。owner
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}
だから、私の質問は:
- オブジェクト間の双方向リンクは本当に必要ですか?
- はいの場合、それを最適化するためのツールはありますか?
Mongoose で何らかの多対多の関係を使用する必要があるのではないでしょうか?
ありがとう!