我有连接到 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)
- 1 回答
- 0 关注
- 101 浏览
添加回答
举报
0/150
提交
取消