mongodb ObjectId 的问题
Troubles with mongodb ObjectId
我有连接到 mongodb 数据库的 Go 代码。
问题是当我试图从集合中获取记录时,有一个 ObjectId
类型的“_id”字段,但在 mgo 驱动程序中 ObjectId
是
type ObjectID [12]byte
但是当我尝试获取记录时,Go 说:
reflect.Set: value of type []uint8 is not assignable to type 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)
}
您必须使用 "predefined" bson.ObjectId
来为 MongoDB 的 ObjectId 的值建模:
type Edge struct {
ID bson.ObjectId `bson:"_id"`
Name string `bson:"name"`
StartVertex string `bson:"startVertex"`
EndVertex string `bson:"endVertex"`
}
并且当您通过类型为MongoDB的ObjectId的ID查询对象时,使用bson.ObjectId
类型的值。您可以使用 Collection.FindId()
方法:
var id bson.ObjectId = ...
err = e.FindId(id).One(&result)
在此处查看详细信息:; and
我有连接到 mongodb 数据库的 Go 代码。
问题是当我试图从集合中获取记录时,有一个 ObjectId
类型的“_id”字段,但在 mgo 驱动程序中 ObjectId
是
type ObjectID [12]byte
但是当我尝试获取记录时,Go 说:
reflect.Set: value of type []uint8 is not assignable to type 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)
}
您必须使用 "predefined" bson.ObjectId
来为 MongoDB 的 ObjectId 的值建模:
type Edge struct {
ID bson.ObjectId `bson:"_id"`
Name string `bson:"name"`
StartVertex string `bson:"startVertex"`
EndVertex string `bson:"endVertex"`
}
并且当您通过类型为MongoDB的ObjectId的ID查询对象时,使用bson.ObjectId
类型的值。您可以使用 Collection.FindId()
方法:
var id bson.ObjectId = ...
err = e.FindId(id).One(&result)
在此处查看详细信息: