0

私はmongodbドキュメントをモデル化する最良の方法で遊んでいます

学校をモデルにしています。

学生には多くの科目があります。

Student{
  subjects:[ {name:'',
              level:'',
              short name:''
             },
             {...},
             {...}]
}

パフォーマンスのために、対象を非正規化して学生に埋め込むことにしました。

サブジェクトを照会して更新する必要があるまれなケースがあります。

subjects.all
subject1.short_name = 'something new'

すべての科目の記録を更新するために、すべての生徒を反復処理する必要があることはわかっています。

しかし、すべてのユニークなサブジェクトを返す最良の方法は何ですか?

たとえば、student.subjects の名前を一意に検索できますか?

それとも、別のコレクションを持っている方が良いですか?

Subjects{
    name:'',
    level:'',
    short name:''
}

私はまだ正規化されていない Student.subject を保持しています。しかし、これは単に提供されているすべての主題を照会するためのものです。

更新すると、これと埋め込まれたすべての Student.subject が更新されますか?

提案/推奨事項はありますか?

4

1 に答える 1

0

しかし、すべてのユニークなサブジェクトを返す最良の方法は何ですか?

これは、ここでのスキーマの短い落下です。この種のことを簡単に行う能力と引き換えに、より頻繁に行う他の速度の利点が得られます.

現在、唯一の実際の方法は、distinct()コマンド ( http://docs.mongodb.org/manual/reference/method/db.collection.distinct/ ) を使用することです。

db.students.distinct('subjects.name');

または集約フレームワーク:

db.students.aggregate([
    {$unwind:'$subjects'},
    {$group:{_id:'$subjects.name'}}
])

そのようです。

スキーマの推奨事項については、この種のクエリを頻繁に作成する場合は、サブジェクトを別のコレクションに分割します。

于 2013-07-26T07:14:23.373 に答える