我是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真的有可能无法解决这样一个非常简单的问题吗?它甚至不是一个问题,而是一个标准的-我们周围世界的普遍情况。
谢谢
答案 0 :(得分:1)
也许您可以在员工文档中使用简单的departmentId
(具有部门的Mongo ID的值)?
这样可以避免嵌入文档,并且用例可以工作:
这项工作对您来说是否可以接受?