为了账号安全,请及时绑定邮箱和手机立即绑定

mongodb ObjectId 的问题

mongodb ObjectId 的问题

Go
哈士奇WWW 2023-07-10 14:32:26
我有连接到 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 seetype ObjectID []uint8// modeltype Edge struct {    ID          ObjectID `bson:"_id"`    Name        string   `bson:"name"`    StartVertex string   `bson:"startVertex"`    EndVertex   string   `bson:"endVertex"`}// method for getting record by those idsession, 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)    }
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您必须使用“预定义”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)


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信