MongoDB中的多对一关系

问题描述 投票:0回答:1

我是MongoDB和NoSQL数据库的新手,我正在尝试学习不同类型的想法,每个人都提到NoSQL。

我有一个多对一关系的典型情况。请不要告诉我MongoDB不是关系数据库,因为我已经知道了。关键点是 - 现实以某种方式运作,我需要让我的应用程序来反映它。现实世界充满了关系,如果你的答案是“为你的案例选择不同的数据库”,那么我认为MongoDB团队可以关闭他们的业务,因为在这种情况下他们的产品将完全没用。

因此,我们假设典型的员工/部门关系。员工与单个部门相关联。部门可以有零个或多个员工。

让我们假设超级简单的模型:

public class Department {

    private String name;

   // something like...
   private List<Employee> employees;

}

public class Employee {

    private String name;

   // something like...
   private Department department;

}

现在在我的REST API中,我需要一些非常基本的功能:

  • 获取所有部门的清单
  • 获取所有员工的列表,但必须包含每个员工的部门名称
  • 获取所选部门的员工列表

那么你如何用MongoDB解决这个问题呢?我也使用Spring Boot和Spring Data,但我认为它并不重要。

我遇到过不同的方法,但对我来说似乎都很糟糕。在员工中嵌入部门将无法获得单个部门的所有部门或员工的列表。将员工嵌入部门将无法获得所有员工的列表。使用@DbRef将模拟关系,但是如何在不为每个员工调用REST API的情况下获取包括部门名称在内的员工列表?

我最近阅读了很多教程,手册和StackOverflow讨论,但我没有找到可接受的答案。 MongoDB真的有可能无法解决这么简单的问题吗?这甚至都不是问题,而是我们周围世界的标准 - 常见情况。

谢谢

spring mongodb spring-data-mongodb
1个回答
1
投票

也许您可以在Employee文档中使用简单的departmentId(部门的Mongo ID值)?

这样就可以避免使用嵌入式文档,并且您的用例可以正常工作:

  1. 所有部门案例只是部门集合中的全部查找。
  2. 所有员工都是员工集合中的所有员工,然后在您的服务器中,您需要为员工中存在的所有不同部门ID调用部门集合。
  3. 所选部门案例的所有员工都是员工集合中的find-by-departmentId。

这会以可接受的方式为您服务吗?

© www.soinside.com 2019 - 2024. All rights reserved.