在mongo go驱动程序中使用DBRef

时间:2019-12-09 16:18:20

标签: database mongodb go dbref mongo-go

我想将DBrefgo-mongo-driver一起使用,但找不到任何示例。我该如何实现? 我之前使用过Spring Data Mongodb,您可以在类中指示Dbref:

  

@DBRef私人EmailAddress电子邮件地址;

有人来示范一个好例子吗? 预先感谢

1 个答案:

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