繁体   English   中英

如何使用 Spring 引导 + MongoDB 处理多对一关系

[英]How do I handle Many-To-One Relationships with Spring Boot + MongoDB

我正在学习如何使用 MongoDB 和 spring 引导(Spring 数据 MondoDB)。

在我当前使用 PostgreSQL 的代码库中,我有一个 API GET /api/orders/238392 ,它返回一个 model ,如下所示:

{
    "orderId":238392,
    "status":"FULFILLED",
    "senNumber":"AB8893920",
    "customer":{
        "customerId":"lskj2409023471lskdjflsf",
        "name":"John Doe",
        "email":"john.doe@acme.com",
        "phoneNumber":"7326585306",
        "city":"Los Angeles"
    }
}

我现在想在后端使用 MongoDB 来实现这个用户案例。 这是我的 model

// 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 中做到这一点(那是我需要帮助的地方)。

现在,我的问题。 我有两个 collections - CustomerOrder 它们都有 CRUD API。 如何处理订单和客户之间的多对一关系。

如果用户更新了客户的某些属性(名称、email 等),该更改如何反映在订单文档中?

我想到了以下选项:

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

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

谢谢,斯里拉姆

您有以下关系:一个客户可以有多个订单。 对于您提供的GET /api/orders/238392的 API,您应该在您拥有的每个订单中引用 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-第 3 部分

暂无
暂无

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

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