Troubles with mongodb ObjectId
我有连接到 mongodb 数据库的 Go 代码。
问题是当我试图从集合中获取记录时,有一个
1 | type ObjectID [12]byte |
但是当我试图获得记录时,Go 说:
reflect.Set: value of type []uint8 is not assignable to type ObjectID
我尝试创建自己的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // 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) } |
您必须使用"预定义"
1 2 3 4 5 6 | type Edge struct { ID bson.ObjectId `bson:"_id"` Name string `bson:"name"` StartVertex string `bson:"startVertex"` EndVertex string `bson:"endVertex"` } |
当您通过 ID 查询类型为 MongoDB 的 ObjectId 的对象时,请使用类型为
1 2 | var id bson.ObjectId = ... err = e.FindId(id).One(&result) |
在此处查看详细信息:使用 mgo 按 id 查找;和 MongoDB 切片查询到 golang