mongodb - 基于 Mongodb 的电子学习网络应用程序上的多对多关系?

标签 mongodb

我对 No-SQL 数据库比较陌生。我正在为电子学习网络应用程序设计数据结构。将有 X 数量的类(class)和 Y 数量的用户。

每个用户都可以参加任意数量的类(class)。

每门类(class)都由许多部分组成(每个部分可能是一个视频或一个测验)。

我需要跟踪用户学习的每个部分,因此我认为整个类(class)应该是用户集的一部分(对于每个用户),如下所示:

{
   _id: "ed",
   name: "Eduardo Ibarra",
   courses: [
                {
                  name: "Node JS",
                  progress: "100%",
                  section: [
                      {name: "Introdiction", passed:"100%", field3:"x", field4:""},
                      {name: "Quiz 1", passed:"75%", questions:[...], field3:"x", field4:""},
                  ]
                },
                {
                  name: "MongoDB",
                  progress: "65%",
                  ...
                }
              ]
 }

这是最好的方法吗?

最佳答案

我想说的是,根据您的查询来设计您的数据库。有一点是肯定的..您将必须进行一些嵌入。

如果您要对用户正在执行的操作执行更多查询,请将用户作为主要实体并将类(class)嵌入其中。您不需要嵌入整个类(class)信息。有关类(class)的信息是静态的。例如:有关 Node JS 类(class)的数据 - 即类(class)内容、作者、练习文件等 - 不会改变。因此您可以将类(class)信息单独保存在另一个集合中。但用户完成了多少类(class)取决于个人用户。因此,您应该只保留类(class)的 ID(存储在单独的“类(class)”集合中),并且对于每个用户,您可以存储与嵌入在用户集合本身中的(用户、类(class))对相关的信息。

现在最重要的问题 - 如果您必须执行需要“加入”用户和类(class)集合的查询该怎么办?为此,您可以使用 javascript 首先获取类(class)(并且可能将它们存储在数组或列表等中),然后从类(class)集合中获取每个类(class)的用户,反之亦然。网上有一些驱动程序可以帮助您完成此任务。其中之一是 UnityJDBC,可用 here .

根据我的经验,我知道知道要从 MongoDB 查询什么对于设计数据库非常有帮助,因为 MongoDB 的 NoSQL 本质意味着您没有正确的设计方法。如果任何方法都不允许你完成你的任务,那么它就是不正确的。很明显,事先知道您将使用数据库做什么(即您将查询什么)是唯一的指导。

关于mongodb - 基于 Mongodb 的电子学习网络应用程序上的多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23974799/

相关文章:

mongodb - 如何对 Spring Boot MongoRepository 进行单元测试?

python - 在 MongoEngine 中过滤嵌入列表

mongodb - 用于 Lambda 的 NestJS 外部的 Mongoose 连接

mongodb - 比较mongodb中的日期

mysql - 将单个非重复数据存储到数据库的最佳方法是什么?

node.js - 使用 Angular-Meteor 运行预定作业的最理想方式

javascript - MongoDB _id 作为字符串(MEAN 堆栈)

android - mongodb 3.x 驱动程序 Android 兼容性

mongodb - 仅检索 MongoDB 集合中对象数组中的查询元素

mongodb - Docker-无法在容器中挂载启动mongodb-不允许操作