为 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 集合中的每个文档添加新字段

MongoDB:使用pymongo在一个集合中删除多个文档中的数组值

Spring数据mongodb过滤字符串集合中的嵌套对象ID

MongoDB:如何为集合中的每个文档设置一个等于另一个字段值的新字段[重复]

从不同集合中的数据创建新条目 (MongoDb)

将对象数组转换为虚拟 mongodb 集合