我在徘徊是什么让MongoDB更快。有一些父文档,里面有大量嵌入文档,或者里面有很多嵌入文档的父文档。
这个问题只涉及查询速度。我不关心重复信息的数量,除非你告诉我它会影响搜索速度。 (我不知道MongoDb是否自动索引Id)
示例:
让以下实体每个只有一个Id字段:
为了让学生与课程相关联,如果我这样做,我是否会充分利用MongoDB的速度:
这个例子只是一个例子。一个真实的想法会涉及数以千计的文件。
答案 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
字段都不会自动编入索引,但您可以手动创建此类索引。