我是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
(部门的Mongo ID值)?
这样就可以避免使用嵌入式文档,并且您的用例可以正常工作:
这会以可接受的方式为您服务吗?