MongoDB的性能。 embedded式文件search速度

我在徘徊保持MongoDB更快。 有一些embedded式文档大数组的父文档,或者有很多embedded式文档的父文档。

这个问题只关心查询速度。 除非您告诉我它影响search速度,否则我不关心重复信息的数量。 (我不知道如果MongoDb自动索引Id的)

例:

具有以下实体,每个实体只有一个Id字段:

  • class级(8个不同class级)
  • 学生(100个不同的学生)

为了将学生与class级联系起来,如果我:我是否会充分利用MongoDB的速度?

  • 将所有学生存储在数组中,在他们参加的课程中
  • 在每个学生的内部,我和他们一起上课。

这个例子只是一个例子。 一个真正的sittuation将涉及数以千计的文件。

我将在给定的class级内search特定的学生。

如果是这样,你应该有一个学生集合,一个字段设置为类(只是类ID可能比embedded和重复类文档更好)。

否则,您将无法正确查询学生:

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

将按预期工作,而将学生存储在他们所参加的class级中

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

有(除了重复)查询的问题

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

只要有至less一名女学生和至less一名22岁的学生(可能是男性),就会给所有学生提供math课程。

你只能得到主文档的列表,并且会包含所有未经过滤的embedded文档, 另请参阅这个相关的问题 。

我不知道如果MongoDb自动索引ID

唯一的自动索引是“主”文档的主键_id 。 embedded文档的任何_id字段都不会自动编入索引,但可以手动创build这样的索引。