mongodb ObjectId 的问题

我有连接到 mongodb 数据库的 Go 代码。问题是,当我尝试从集合中获取记录时,有一个类型的“_id”字段ObjectId,但在 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)

    }


哈士奇WWW
浏览 102回答 1
1回答

繁花不似锦

您必须使用“预定义”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 的对象时,请使用 type 的值bson.ObjectId。并且你可以使用以下Collection.FindId()方法:var id bson.ObjectId = ... err = e.FindId(id).One(&result)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go