【问题标题】:Many to many relations MongoDB多对多关系MongoDB
【发布时间】:2018-11-03 09:29:08
【问题描述】:

我正在尝试使用 MongoDB 创建数据库。由于我没有使用 NoSQL 数据库的经验,我在设计数据库时遇到了一些麻烦。

我想创建一个数据库,其中一个学生可以是多个会话的一部分,一个会话可以包含多个学生(多对多)。此外,每个活动都与一个会话中的一个学生相关联。

到目前为止,我是这样设计的:

会话:

Sessions.students = [student_id1, student_id2]

学生:

Students.sessions = [session_id1, session_id2]

但我的问题是,我应该将关系存储在哪里,在会话或学生中,或两者中(如上)?

这是创建事件关系的正确方法吗?

事件:

Event.studentid = [student_id1]
Event.sessionid = [session_id1]

【问题讨论】:

  • 会话是您应该存储在数据库中的状态吗?我假设会话状态经常更改,因此您将大量修改会话文档..
  • 阅读mongodb.com/blog/post/… 获取灵感。没有单一的“正确”方式,而是有多种“正确”方式,在不同的查询中效率不同。您需要估计数据的预期用途并设计最适合您的架构。

标签: mongodb


【解决方案1】:

作为用户,您在数据库中有 2 个集合,称为学生和会话。

在学生集合中:每个文档包含一个 sessionIds 数组,在会话集合中:每个文档包含一个 studentIds 数组。

要获取列表中的数据,您需要使用聚合

  • 查询喜欢的学生

      students.aggregate({
        //here write query using $match, $unwind, $lookup
        //$unwind : sessionIds from sessions
      })
    
  • 查询像

    这样的会话
      sessions({
        //here write query using $match, $unwind, $lookup
        //$unwind : studentIds from students
      })
    

【讨论】:

  • 无需在每个集合中获取_id 的数组...简单的_id 应该是一个不错的选择...
【解决方案2】:

1) 如果您需要了解每个课程有多少学生以及每个学生参加了多少课程。

对于 mongodb store id's in each other collections 中的多对多关系。

2) 如果其中一个问题与您的项目相关,则仅相应地存储 ID。

例如:如果您需要查找会话信息而不是学生信息,则存储

session.student=[studentid1, id2 id3]; student.session=[] 不需要

也可以使用索引进行搜索,但不要使用太多。

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 2014-01-21
    • 2014-08-15
    • 2020-12-05
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多