登录
首页 >  Golang >  Go问答

使用数据库引用(DBRef)在mongo go驱动程序中

来源:stackoverflow

时间:2024-03-25 13:36:38 156浏览 收藏

在 MongoDB Go 驱动程序中使用数据库引用 (DBRef) 时,应考虑使用嵌入式模型或手动引用,因为 DBRef 可能需要进行两次数据库查询。嵌入式模型将相关信息存储在同一文档中,而手动引用使用 _id 字段将文档链接到其他文档中。虽然 MongoDB Go 驱动程序不支持 DBRef,但可以手动构建 DBRef 结构,但需要自行解析引用。

问题内容

我想将 DBrefgo-mongo-driver 一起使用,但我找不到任何有关它的示例。我怎样才能实现这个目标? 我之前使用过 Spring Data Mongodb,您可以在类中指示 Dbref,如下所示:

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

有没有人可以举个例子? 提前致谢


解决方案


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

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>