【发布时间】:2021-01-25 13:30:01
【问题描述】:
我正在学习如何将 MongoDB 与 Spring Boot(Spring 数据 MondoDB)一起使用。
在我当前使用 PostgreSQL 的代码库中,我有一个 API GET /api/orders/238392,它返回一个模型如下:
{
"orderId":238392,
"status":"FULFILLED",
"senNumber":"AB8893920",
"customer":{
"customerId":"lskj2409023471lskdjflsf",
"name":"John Doe",
"email":"john.doe@acme.com",
"phoneNumber":"7326585306",
"city":"Los Angeles"
}
}
我现在想在后端使用 MongoDB 来实现这个用户案例。这是我的模型
// Orders.java
@Data
@Document
public class Order {
@Id
private Long orderId;
private String status;
private String senNumber;
private Customer customer;
}
//Customer.java
@Data
@Document
public class Customer {
@Id
private String customerId;
private String name;
private String email;
private String phoneNumber;
private String city;
}
我的 API 现在可以正常工作了。但是,我对订单和客户之间的关系有疑问。
在关系世界中,我在customer 上有@ManyToOne,如下:
@ManyToOne
private Customer customer;
我无法在 Mongo 中执行此操作(我需要帮助)。
现在,我的问题。我有两个集合 - Customer 和 Order。它们都有 CRUD API。如何处理 Order 和 Customer 之间的 ManyToOne 关系。
如果用户更新客户的某些属性(姓名、电子邮件等),该更改如何反映在订单文档中?
我想到了以下选项:
- 当我更新客户时,我可以使用新客户详细信息更新所有订单文档(这似乎不正确 - 我觉得可能会导致大量性能开销)
- 使用
@DbRef之类的东西 - 如果是这种情况,我能否获得一些指向相关文档或参考资料的链接。 - 偶然发现了一个名为
RelMongo的库,它允许您像在关系世界中一样使用@ManyToOne注释。
这可能是一个简单的最佳实践问题,我不确定。但是,任何帮助都会大大提高我的理解力!
谢谢, 斯里拉姆
【问题讨论】:
标签: spring mongodb spring-boot