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 })

将为您提供所有学生的数学课,只要其中至少有一名女学生和至少一名 22 岁的学生(可能是男性)。

您只能获取主要文档的列表,它将包含所有未过滤的嵌入文档,另请参阅此相关问题

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

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

于 2012-05-28T08:54:41.903 回答