我之前使用过 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"`
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,您确实需要将相关信息存储在单独的文档中,您应该使用手动引用。您可以通过将_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"`
}
Run Code Online (Sandbox Code Playgroud)
同样,请注意 MongoDB 驱动程序不会自动解析DBRef. 驱动程序之上可能有框架或帮助程序可以提供自动参考解析(通过执行第二个查询来查找值)。
| 归档时间: |
|
| 查看次数: |
1262 次 |
| 最近记录: |