[英]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 - Customer和Order 。 它們都有 CRUD API。 如何處理訂單和客戶之間的多對一關系。
如果用戶更新了客戶的某些屬性(名稱、email 等),該更改如何反映在訂單文檔中?
我想到了以下選項:
@DbRef
之類的東西 - 如果是這樣的話,我可以獲得一些指向相關文檔或參考的鏈接。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.