MongoDB中的多对一关系

时间:2019-04-02 12:53:05

标签: spring mongodb spring-data-mongodb

我是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真的有可能无法解决这样一个非常简单的问题吗?它甚至不是一个问题,而是一个标准的-我们周围世界的普遍情况。

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

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

这项工作对您来说是否可以接受?

相关问题