Mongodb 模式和集合适用于我的大学应用程序中的三级嵌套

What Mongodb schema and collection is good for three levels of nesting in my University app

我正在设计模式 mongoose 模式和集合我需要很少的帮助,因为在我的案例中有三个级别的嵌套。

案例场景:

  1. 我们大学有系。请参阅屏幕截图 - 我们有第一个下拉列表,将是物理、化学、数学。

  2. 现在在部门下我们有一对多关系的主文件夹,这意味着一个部门有很多主文件夹。教授可以 select 他们的部门并根据需要添加主文件夹。

  3. 在主文件夹下,我们有与主文件夹具有一对多关系的子文件夹。

  4. 终于教授可以select部门、主文件夹、子文件夹、文件提交记录了

  5. 有一点很重要,我们只在 mongodb 中保存上传文件名。包含内容的实际文件保存在 AWS s3 存储桶中。

问题是我们应该如何构造架构以避免聚合或连接。 我们可以创建两个集合,一个有部门、主文件夹、子文件夹吗 和其他集合有所有保存的记录,即当教授添加文件并点击提交时。

感谢您的帮助。

我只使用两个集合设计了这个应用程序。我们可以在一个集合中进行管理,但是存在大量重复记录。一旦记录超过 500 条,这些重复记录就不值钱了,而且速度会变慢。

集合 1:大学、系、主文件夹、带 ID 的子文件夹。

集合 2:包含大学和子文件夹 ID 的文件数据引用。

集合 1 架构:

{
        "_id" : ObjectId("5d43489e1c6d3742443ff457"),
        "subjectid" : ObjectId("5ce31c4fa3bfd856d880c13c"),
        "subjectname" : "Physics",
        "createdby" : "Einstien",
        "createdon" : ISODate("2019-08-01T21:29:49.231Z"),
        "mainfolders" : [ 
            {
                "folderid" : ObjectId("5ce31c4fa3bfd856d880c13c"),
                "foldername" : "Theory of Relativity",
                "createdby" : "Einstien",
                "createdon" : ISODate("2019-08-01T21:29:49.231Z"),
                "subfolders" : [ 
                    {
                      "subfolderid" : ObjectId("5ce31c4fa3bfd856d880c13c"),
                       "subfoldername" : "Velocity of light",
                        "createdBy" : "Einstien",
                        "createdOn" : ISODate("2019-08-01T21:29:49.231Z"),
                    }, 
                    {
                        "subfolderid" : ObjectId("5ce31c4fa3bfd856d880c13c"),
                        "subfoldername" : "Energy to mass relation",
                        "createdBy" : "Einstien",
                        "createdOn" : ISODate("2019-08-01T21:29:49.231Z"),
                    }
                ]
            }
        ]
    }

集合 2 架构:

{
    "_id" : ObjectId("5d48710d5cd1ad179886dbb6"),
    "filename" : "Theory of relativity.pdf",
    "contentdesc" : "The theory of relativity usually encompasses two interrelated theories by Albert Einstein: special relativity and general relativity......whole content....."
    "createdby" : "Ben",
    "createdon" : ISODate("2019-08-05T18:10:22.447Z"),
    "folder" : "5d4359cd5cd1ad179886dbaf",
    "subjectid" : ObjectId("5ce31c4fa3bfd856d880c13c"),
    "folderid" : ObjectId("5ce31c4fa3bfd856d880c13c"),
    "subfolderid" : ObjectId("5ce31c4fa3bfd856d880c13c"),
}

此设计利用:

  1. 轻松添加部门、文件夹和子文件夹,无重复记录。
  2. 易于存储 1: * 文件中的关系在单独的集合中引用键。 MongoDB 文档说在重复的情况下规范化记录。 link here
  3. 在获取大学部门、文件夹时无需使用不同。

我就是这样设计这个问题的,欢迎任何优化建议。