繁体   English   中英

MongoDB中的多对一关系

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

谢谢

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

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

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

这会以可接受的方式为您工作吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM