我想将DBref
与go-mongo-driver
一起使用,但找不到任何示例。我该如何实现?
我之前使用过Spring Data Mongodb,您可以在类中指示Dbref:
@DBRef私人EmailAddress电子邮件地址;
有人来示范一个好例子吗? 预先感谢
答案 0 :(得分:0)
我之前使用过Spring Data Mongodb,您可以在类中指示Dbref
除非您有令人信服的理由使用DBRefs,否则应避免使用它,或改为使用manual references。
对于您发布的示例,您绝对应该首先尝试将EmailAddress
的值嵌入文档中。使用嵌入式模型应该使您不必两次查询数据库即可检索EmailAddress
值。另请参见Embedded Data Models。
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"`
}
在某些情况下,确实需要在单独的文档中存储相关信息,则应使用manual references。您可以通过将一个文档的_id
字段保存在另一文档中作为参考来实现。然后,您的应用程序可以运行第二个查询以返回相关数据。从MongoDB v3.4 +开始,您可以使用$lookup或$graphLookup进行查找。
MongoDB Go driver不直接支持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
。在驱动程序之上可能有框架或帮助程序可以提供自动参考解析(通过执行第二个查询来查找值)。