1 回答

TA貢獻1887條經驗 獲得超5個贊
我之前使用過 Spring Data Mongodb,你可以在類中指定 Dbref
除非您有令人信服的理由使用DBRef?,否則您應該避免使用它,或者改用手動引用。
對于您發布的示例,您絕對應該EmailAddress
首先嘗試將 的值嵌入到文檔中。使用嵌入式模型應該可以避免您為了檢索值而兩次查詢數據庫EmailAddress
。
type User struct?
{
? ? ID? ? ? ? ? ?primitive.ObjectID `json:"ID" bson:"_id"`
? ? UserName? ? ?string? ? ? ? ? ? ?`json:"username"`
? ? EmailAddress Email? ? ? ? ? ? ? `json:"emailAddress"`
}
type Email struct?
{
? ? ?PrivateEmail? ? ?string? ? ? `json:"private"`
? ? ?BusinessEmail? ? string? ? ? `json:"business"`
}
在某些情況下,您確實需要將相關信息存儲在單獨的文檔中,您應該使用手動參考。您可以通過將_id
一個文檔的字段保存到另一文檔中作為參考來完成此操作。然后您的應用程序可以運行第二個查詢來返回相關數據。從 MongoDB v3.4+ 開始,您可以使用$lookup或$graphLookup來執行查找。
MongoDB Go 驅動程序不直接支持DBRef
類型。Spring Data MongoDB 提供了一個方便的輔助方法來自動形成查詢DBRef
,盡管在幕后它只是查詢數據庫兩次。
說了以上所有內容,并且存在一些您需要的特殊邊緣情況,您可以構建自己的結構,如下例所示:
type User struct?
{
? ? ID? ? ? ? ? ? ? ?primitive.ObjectID? `json:"ID" bson:"_id"`
? ? UserName? ? ? ? ?string? ? ? ? ? ? ? `json:"username"`
? ? EmailAddress? ? ?DBRef? ? ? ? ? ? ? ?`json:"emailAddress"`
}
type DBRef struct {
? ?Ref interface{}? ?`bson:"$ref"`
? ?ID? interface{}? ?`bson:"$id"`
? ?DB? interface{}? ?`bson:"$db"`
}
再次請注意,MongoDB 驅動程序不會自動解析DBRef. 驅動程序之上可能有框架或幫助程序可以提供自動引用解析(通過執行第二個查詢來查找值)。
- 1 回答
- 0 關注
- 143 瀏覽
添加回答
舉報