首页 > 解决方案 > MongoDB中的多对一关系

问题描述

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

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

所以让我们假设典型的员工/部门关系。Employee链接到单个Department部门可以有零个或多个员工

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

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真的有可能解决不了吗?这甚至不是问题,而是我们周围世界的标准常见情况。

谢谢你

标签: springmongodbspring-data-mongodb

解决方案


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

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

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

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


推荐阅读