2011-12-14 2 views
2

こんにちは、私はmongoDBとMongoidを使い慣れていて、組み込みのドキュメントを使用するタイミングと組み込みの深さについてちょっと混乱しています。だから、架空の例モンゴイドにどの程度深く埋め込むべきですか?

Library collection has_many :books, which embeds_many :pages, which embeds_many :sections

私が働くことができないので、セクションは、直接私が右、トラフbooks.pages.sectionsを行かなければならないと言いますか?

これはこのルートになりますlibraries/:id/books/:id/pages/:id/sections/:id これはちょっと狂っているようですが、ベストレベルでは1つのレベルを深く入れようとするのでしょうか? 1つの方法は、ルートpages/:id/sections/:idを持っているし、要求にbookidを貼っているだろうか?

セクションに問い合わせるのは難しいですか?たとえば、セクションにタグxが付いているすべての書籍を検索する必要がある場合

しかし、私は余分なクエリを持っていると思いますか?

誰かが光を放つことはできますか?ありがとう。

+1

ルーティングは、データベースの設計とは明示的に関係していません。あなたは本当にそのような深いネストされたルートを避けるべきです。ほとんどの場合、それらは必要ではない。 – asaaki

答えて

6

まず最初に、誰もあなたがドキュメントをどの程度深く埋め込むべきかについて正しい答えを与えることはできないと思います。具体的なプロジェクト要件に大きく依存しています。一般的には、適切なスキーマ設計を選択するためにいくつかの質問に答える必要があります。

  1. ユーザーはコレクション内で同じオブジェクトを同時に更新しますか? (クライアントがアップデートを失った場合、私の上司は何を言いますか)
  2. 私はアトミックな操作をサポートしていますか?
  3. ネストされたコレクションを個別に表示する必要がありますか、またはそれらを親に対してクエリしますか?
  4. 埋め込みオブジェクトをソートする必要はありますか?
  5. 埋め込みオブジェクトでクエリする必要はありますか?

1,2- 3私はそれらを独立して表示する必要があります(別のページ)。 4,5 - 本当に私はあなたのお尻に埋め込みがある種の痛みであると確信しています。

余計なクエリは問題ありません。

+0

参照:http://www.mongodb.org/display/DOCS/Schema+Design – asaaki

関連する問題