2016-05-05 11 views
0

私が取り組んでいるアプリケーションのための荒いデザインを考え出しています。私が知りたいのは、mongoの1対多の関係を直接的にマッピングする方法がある場合です。MongoDBと一対多の関係

私のスキーマは、このようなものです:

  • デバイスの束があります。
  • 各デバイスは、その名前/ IDによって一意に認識されます。
  • 各デバイスは、複数のインターフェイスを持つことができます。
  • これらのインターフェイスは、指定されたフロントエンドのユーザが任意の 時刻に追加できます。
  • インターフェイスはIDによって一意に認識され、 と1つのデバイスのみを関連付けることができます。
  • デバイスには、少なくとも100個のインタフェースのオーダを含めることができます。

私はMongoDBのドキュメントで、埋め込みドキュメントと複数のコレクションの関連について説明しました。私はモンゴーと流星で始まったばかりなので、これ以上の詳細な明瞭さは決してありません。

質問ですが、どうすれば一見優れたアプローチができますか?複数の小さなコレクションを持つか、1つの大きな埋め込みコレクションを持つ。私はこの質問が幾分主観的であることを知っています、私はちょうどこの分野の専門知識を持っている人々からいくつかの明快さを必要とします。

もう1つの質問は、埋め込まれたモデルについて考えてみましょう。ドキュメントの一部だけを更新する方法はありますか(インターフェイスだけに特化しています)、itfが追加されると、同じデバイスドキュメントですか?

答えて

2

これはアプリケーションの目的によって異なります。

ビッグ文書

あなたは(通常は)データを変更するつもりはありませんが、あなたは彼らに多くのことを照会するつもりなら、大きな埋め込まれたコレクションは次のようになりたいと思う場所の良い例。私のアプリケーションでは、すべての情報を含む事前処理された旅行を保存するためにこれを使用します。したがって、この旅行に相談したい人は、すべての情報が1つの文書にあります。しかし、クエリが旅行に埋め込まれた値に基づいている場合、リスト内では非常に遅いでしょう。その場合は、両方のコレクションの間にリレーションを持つ別のコレクションを作成することをお勧めします。また、ドキュメントの一部を更新する場合は、ドキュメント全体を取得してから更新する必要があるため、ドキュメントの一部を更新するには時間がかかるでしょう。あなたは多くのデータを変更する予定がある場合の関係と

小さな文書が

、私は別のコレクションへの参照に固執するあなたをお勧めします。小さな文書では、これにより、コレクションをすばやく更新することができます。 のユニークなモデルをに関連づけたい場合は、mongoのユニークなインデックスを使用することをお勧めします。これは、db.members.createIndex({ "user_id": 1 }, { unique: true })を使用して行うことができます。

したがって:

  • ビッグオブジェクト:データを問い合わせるために大きいが、複雑なクエリのために遅いです。
  • 関連する小さなコレクション:更新には最適ですが、別個のコレクションでいくつかのクエリが必要です。