簡體   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