登录
首页 >  Golang >  Go问答

解决 MongoDB ObjectId 的疑惑

来源:stackoverflow

时间:2024-03-07 11:57:26 417浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《解决 MongoDB ObjectId 的疑惑》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

我有连接到 mongodb 数据库的 go 代码。 问题是,当我尝试从集合中获取记录时,有一个 objectid 类型的“_id”字段,但在 mgo 驱动程序中 objectid

type objectid [12]byte

但是当我试图获得记录时,go 说:

reflect.set:类型 []uint8 的值不可分配给类型 objectid

我尝试创建自己的 []uint8 类型,但我不知道如何将 []uint8 (“objectid”)转换为 string 或通过这些 id 查找一些记录。

// ObjectId type that mongodb wants to see
type ObjectID []uint8

// model
type Edge struct {
    ID          ObjectID `bson:"_id"`
    Name        string   `bson:"name"`
    StartVertex string   `bson:"startVertex"`
    EndVertex   string   `bson:"endVertex"`
}


// method for getting record by those id
session, err := mgo.Dial(config.DatabaseURL)
    if err != nil {
        fmt.Printf("Error is: %s", err)
    }
    defer session.Close()
    session.SetMode(mgo.Monotonic, true)

    //edges collection
    e := session.DB(config.DatabaseName).C(config.EdgesCollection)

    var result models.Edge

    err = e.Find(bson.M{"_id": fmt.Sprintln("ObjectId('", id, "')")}).One(&result)
    if err != nil {
        fmt.Println("Error is: ", err)
    }

解决方案


您必须使用“预定义”bson.ObjectId 来对 mongodb 的 objectid 值进行建模:

type edge struct {
    id          bson.objectid `bson:"_id"`
    name        string        `bson:"name"`
    startvertex string        `bson:"startvertex"`
    endvertex   string        `bson:"endvertex"`
}

当您通过id查询类型为mongodb的objectid的对象时,请使用bson.objectid类型的值。您可以使用Collection.FindId()方法:

var id bson.ObjectId = ...
err = e.FindId(id).One(&result)

查看详情:Find by id with mgo;和MongoDB slice query into golang

今天关于《解决 MongoDB ObjectId 的疑惑》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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