gpt4 book ai didi

mongodb - N :M relationships? 的 MongoDB 中级联删除的推荐等效项是什么

转载 作者:IT老高 更新时间:2023-10-28 13:05:13 25 4
gpt4 key购买 nike

假设以下“模式/关系”设计,使用类似级联删除的操作处理删除的推荐做法是什么?

关系架构:

  +---------+                                    +--------+  | Student |-*--------1-[Enrollment]-1--------*-| Course |  +---------+                                    +--------+

MongoDB:

  +---------+                    +--------+  | Student |-*----------------*-| Course |  +---------+                    +--------+

鉴于这种经典的学生类(class)注册设计,在使用 MongoDB 时,在学生中包含一组类(class)(反之亦然)似乎是一个合适的数据模型(这对于关系/注册表来说没有任何意义)。但是来自关系世界的我应该如何处理删除类(class)的语义?也就是说,当一个类(class)被删除时,所有的“注册”记录也应该被删除。也就是说,我应该从每个学生记录的集合中删除类(class)。看起来我必须触发 2 个查询:一个用于删除类(class),然后从每个学生的收藏中删除它。有没有办法让一个查询来执行这种“级联删除”之类的语义而无需额外的查询?数据模型需要改变吗?

注意:对于所有其他用例,上述数据模型可以正常工作:

  • 删除学生=> 只需删除该学生以及随之删除的相关类(class)集合。
  • 愿意放弃类(class)的学生=>只需将其从学生类(class)集合中删除即可
  • 添加学生/类(class)=>本质上只是将其添加到相应的'table'中。

唯一棘手的事情是处理类(class)的删除。我应该如何在 MongoDB 中处理这种情况,因为我来自关系背景,无法弄清楚这一点。

最佳答案

您正在做的是在 Mongo 中最好和最优化的方式。我处于类似情况,在尝试了 N:M 设计模式的所有可能实现之后,也得出了相同的解决方案。

显然,这不是mongodb的东西,而是更多的NoSQL的概念,其中变化较少的数据(Courses)可以单独保存。而且由于删除类(class)不会是一个非常频繁的操作,因此可以通过所有记录来删除它。

另一方面,你可以让它保持原样。在您的应用程序逻辑中,只需忽略 Student 文档中的 Courses 值,这些值在 Course 文档中根本没有 reference_id。但在这种情况下,您必须确保旧的已删除 Course_id 未被重复使用。

或者只使用类(class)文档中已删除的标志并处理应用程序逻辑中的所有其他内容。

关于mongodb - N :M relationships? 的 MongoDB 中级联删除的推荐等效项是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20370791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com