-1

我想使用DBrefwithgo-mongo-driver但我找不到任何关于它的例子。我怎样才能做到这一点?我之前使用过 Spring Data Mongodb,您可以在类中指定 Dbref,例如:

@DBRef 私人邮箱地址邮箱地址;

有没有人可以举一个很好的例子?提前致谢

4

1 回答 1

6

我之前使用过 Spring Data Mongodb,您可以在类中指定 Dbref

除非您有令人信服的理由使用DBRefs ,否则您应该避免使用它,或者改用手动引用

对于您发布的示例,您绝对应该首先尝试将值嵌入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. 在驱动程序之上可能有框架或助手可以提供自动引用解析(通过执行第二个查询来查找值)。

于 2019-12-11T20:29:33.853 回答