1

MongoDB を高速に保つ方法をさまよっていました。内部に多数のドキュメントが埋め込まれたいくつかの親ドキュメントがあるか、内部にほとんどドキュメントが埋め込まれていない多くの親ドキュメントがあります。

この質問は、クエリ速度のみに関するものです。検索速度に影響すると言われない限り、繰り返される情報の量には関心がありません。(MongoDb が自動的に Id のインデックスを作成するかどうかはわかりません)

例:

それぞれ Id フィールドのみを持つ次のエンティティを持つ:

  • クラス(8種類のクラス)
  • 学生 ( 100 人の異なる学生 )

学生をクラスに関連付けるために、MongoDB の速度を最大限に活用するには、次のようにします。

  • すべての生徒を、出席するクラス内の配列に格納しました
  • 各生徒の中に、彼らが出席するクラスの配列を保持しました。

この例は単なる例です。実際の状況では、何千ものドキュメントが関係します。

4

1 に答える 1

2

特定のクラス内の特定の学生を検索します。

その場合は、フィールドがクラスに設定された Student コレクションが必要です (クラス ID だけが、埋め込まれて複製されたクラス ドキュメントよりも優れている可能性があります)。

そうしないと、学生を適切にクエリできません。

db.students.find ({ class: 'Math101', gender: 'f' , age: 22 })

期待どおりに機能しますが、学生を出席するクラス内に保存します

{ _id: 'Math101', student: [
     { name: 'Jim', age: 22 } , { name: 'Mary', age: 23 }
  ] }

(重複に加えて)クエリが

db.classes.find ( { _id: 'Math101', 'student.gender': 'f', 'student.age': 22 })

は、少なくとも 1 人の女子生徒と少なくとも 1 人の 22 歳の生徒 (男子である可能性があります) がいる限り、すべての生徒で数学のクラスを提供します。

メイン ドキュメントのリストのみを取得できます。これには、フィルタ処理されていないすべての埋め込みドキュメントが含まれます。この関連する質問も参照してください

MongoDb が Id を自動的にインデックス化するかどうかはわかりません

_id唯一の自動インデックスは、「メイン」ドキュメントの主キーです。埋め込ま_idれたドキュメントのフィールドは自動的にインデックス化されませんが、そのようなインデックスを手動で作成できます。

于 2012-05-28T08:54:41.903 に答える