MongoDB性能。嵌入式文档搜索速度

时间:2012-05-28 08:31:33

标签: performance node.js mongodb

我在徘徊是什么让MongoDB更快。有一些父文档,里面有大量嵌入文档,或者里面有很多嵌入文档的父文档。

这个问题只涉及查询速度。我不关心重复信息的数量,除非你告诉我它会影响搜索速度。 (我不知道MongoDb是否自动索引Id)

示例:

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

  • 班级(8个不同班级)
  • 学生(100名不同学生)

为了让学生与课程相关联,如果我这样做,我是否会充分利用MongoDB的速度:

  • 将他们参加的课程中的所有学生存放在阵列中
  • 在每个学生的内心,我保留了他们参加的课程。

这个例子只是一个例子。一个真实的想法会涉及数以千计的文件。

1 个答案:

答案 0 :(得分: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 })
只要至少有一名女学生和至少一名22岁的学生(可能是男性),

将为您提供所有学生的数学课程。< / p>

您只能获取主要文档的列表,它将包含所有嵌入文档,未经过滤,see also this related question

  

我不知道MongoDb是否自动索引Id

唯一的自动索引是“主”文档的主键_id。嵌入式文档的任何_id字段都不会自动编入索引,但您可以手动创建此类索引。