在 mongo go 驱动程序中使用 DBRef

Using DBRef in mongo go driver

我想将 DBrefgo-mongo-driver 一起使用,但找不到任何相关示例。我怎样才能做到这一点? 我之前使用 Spring 数据 Mongodb,您可以在 class 中指示 Dbref,例如:

@DBRef private EmailAddress emailAddress;

有谁能举个例子吗? 提前致谢

I worked with Spring Data Mongodb before and you can indicate Dbref inside a class

除非您有令人信服的理由改用 DBRefs you should avoid it, or use 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. You can do this by saving the _id field of one document in another document as a reference. Then your application can run a second query to return the related data. Since MongoDB v3.4+, you can use either $lookup or $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。驱动程序之上可能有框架或助手,可以提供自动引用解析(通过执行第二个查询查找值)。