为了账号安全,请及时绑定邮箱和手机立即绑定

在 mongo go 驱动程序中使用 DBRef

在 mongo go 驱动程序中使用 DBRef

Go
沧海一幻觉 2023-08-14 14:27:30
我想使用DBrefwithgo-mongo-driver但我找不到任何关于它的例子。我怎样才能实现这个目标?我之前使用过 Spring Data Mongodb,您可以在类中指示 Dbref,如下所示:@DBRef 私人电子邮件地址电子邮件地址;有没有人能举出一个好的例子?提前致谢
查看完整描述

1 回答

?
慕工程0101907

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. 驱动程序之上可能有框架或帮助程序可以提供自动引用解析(通过执行第二个查询来查找值)。


查看完整回答
反对 回复 2023-08-14
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信