我如何处理与Spring Boot + MongoDB的多对一关系



我正在学习如何使用MongoDB与spring启动(spring data MondoDB)。

在我目前使用PostgreSQL的代码库中,我有一个APIGET /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;

我不能在蒙古语中这样做(这是我需要帮助的地方)。

现在,回答我的问题。我有两个集合Customer顺序和。它们都有CRUD api。如何处理订单和客户之间的多对一关系。

如果用户更新了Customer的某些属性(姓名、电子邮件等),该更改如何反映在Orders文档中?

我想到了以下选项:

  1. 当我更新客户时,我可以用新的客户详细信息更新所有的订单文档(这似乎不正确-可能会导致很多性能开销,我觉得)
  2. 使用@DbRef之类的东西-如果是这样的话,我可以得到一些相关文档或参考资料的链接吗?
  3. 遇到一个名为RelMongo的库,它允许您使用@ManyToOne注释,就像您在关系世界中一样。

这可能是一个简单的最佳实践问题,我不确定。然而,任何帮助都有助于提高我的理解!!

谢谢,斯

您有以下关系:一个客户可以有多个订单。对于您提供的APIGET /api/orders/238392,您应该在每个订单中引用customer_id。

如果您有一个路由具有以下属性:GET /api/customer/123/orders,它将返回客户的所有订单,那么您应该通过对orderId的引用数组来跟踪客户的订单。

@ManyToOne and @OneToMany也等价于@DBRef

这里有一篇很好的博客文章,可以帮助你为你的用例选择正确的模式设计:https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-3

相关内容

  • 没有找到相关文章