为 MongoDB 中的每个新对象创建多个集合是不是错误?
Posted
技术标签:
【中文标题】为 MongoDB 中的每个新对象创建多个集合是不是错误?【英文标题】:Is It Wrong To Create More Than One Collection For Every New Object in MongoDB?为 MongoDB 中的每个新对象创建多个集合是否错误? 【发布时间】:2021-09-09 17:08:30 【问题描述】:我正在构建一个应用程序,旨在充当教育组织和盈利组织之间的中间人,以便该应用程序可以注册新学校、大学等,然后为每所新学校、大学创建一个新集合。 。 我创造。但是我在 *** 上阅读了一些帖子,有些人说在帖子请求上创建新集合是错误的。但问题是每所学校都有不同的学生、教师、工作人员......等等,将不同学校的所有学生存储在一个嵌入式文档中似乎是不合逻辑的。那么应该我该怎么办?
【问题讨论】:
是的。集合与 RDBMS 系统中的表同义。在 RDBMS 系统中为每条记录创建一个表是不明智的。索引维护将是一场噩梦。此外,如果您想对相似的数据进行排序或聚合,如果文档都存储在不同的集合中是非常困难的。而是创建一个集合,并在此集合中插入许多文档 - 您的示例中的每所学校都有一个文档,并嵌入关系数据。 MongoDB(或许多其他 NoSQL 数据库)的好处之一是它不需要所有文档都必须具有相同的结构。仅将所有内容放在一个集合中。 【参考方案1】:是的,正确创建每所学校的集合是有问题的,但使用一些数据库设计/数据建模技术可以帮助您
由于学校可以被视为一个机构,因此我们可以拥有一个机构集合,其中每个机构都有自己唯一的 ID
Institutes
_id: "<Institute id>",
name: "<school name>",
desc: "<desc>"
...others
然后我们可以为用户创建一个集合,其中包含用户的所有信息,如姓名、联系信息等。
Users
_id: "<user id>"
name: "<user name>"
...others
然后我们可以创建一个集合,显示哪个用户与哪个机构相关联并具有什么角色
User_Associated_Institute
_id:
school_id: <Institute id>,
user_id: <user id>
,
role: <Staff/Teacher/Student>,
...other
最后我们可以收集哪个学院提供所有课程的集合
Courses_Offered_Institute
_id: "<course id>",
name: "<course name>",
desc: "<desc>",
institutes: ["<Institute id>"],
....others
这只是一个建议,您可以根据自己的用例修改设计
【讨论】:
以上是关于为 MongoDB 中的每个新对象创建多个集合是不是错误?的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB:使用pymongo在一个集合中删除多个文档中的数组值
Spring数据mongodb过滤字符串集合中的嵌套对象ID