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

Performance MongoDB性能。嵌入式文档搜索速度,performance,node.js,mongodb,Performance,Node.js,Mongodb,我在想是什么让MongoDB跑得更快。有几个包含大量嵌入文档的父文档,或者有很多包含少量嵌入文档的父文档 这个问题只涉及查询速度。我不关心重复信息的数量,除非你告诉我它会影响搜索速度。(我不知道MongoDb是否会自动索引Id) 例如: 具有以下实体,每个实体只有一个Id字段: 班级(8个不同的班级) 学生(100名不同的学生) 为了将学生与班级联系起来,如果我: 将所有学生存储在他们所参加的班级内的数组中 在每个学生体内,我都保存着他们上课的序列 这个例子只是一个例子。一个真实的场景需

我在想是什么让MongoDB跑得更快。有几个包含大量嵌入文档的父文档,或者有很多包含少量嵌入文档的父文档

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

例如:

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

  • 班级(8个不同的班级)
  • 学生(100名不同的学生)
为了将学生与班级联系起来,如果我:

  • 将所有学生存储在他们所参加的班级内的数组中
  • 在每个学生体内,我都保存着他们上课的序列
这个例子只是一个例子。一个真实的场景需要数千份文件

我将在给定的班级中寻找特定的学生

如果是这样,您应该有一个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


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

您要查询什么?某个班级的学生?与特定学生一起上课?不同班级的学生?按学生人数排序的班级?好吧,我将在给定的班级中搜索特定的学生。我不确定我是否完全理解你的建议。您似乎只允许学生在学生文档中参加一个课程。不,学生可以使用数组类型字段参加多个课程,正如您在问题中提出的:
{name:'Jim',gender:'m',age:23,class:['Math101','Poetry','Pottery']}
哦,我理解。但是现在,在课堂文档中,你没有任何与任何学生相关的信息?是的,课堂不知道他们的学生。所以其他类型的查询是不可能的。你必须根据你想要的查询和更新时需要保持同步的数据来设计你的数据模式。谢谢你的知识。我都明白了,谢谢你的虚拟收藏链接:D