1 回答
TA贡献1828条经验 获得超3个赞
请注意,labix.org/v2/mgo不再维护,如果您想使用mgo,请github.com/globalsign/mgo改用。或者新的官方mongo-go 驱动程序。
bson.ObjectId是一种具有string以下基础类型的类型:
type ObjectId string
因此,当您像这样填充对象时:
databaseQuery := databasestructs.Find{
ID: bson.ObjectId(request.FormValue("_id")),
MongoCollection: "users",
Criteria: "_id",
CriteriaValue: "",
FindAll: false,
}
bson.ObjectId(request.FormValue("_id"))只不过是类型转换。您将十六进制对象 ID 字符串转换为bson.ObjectId,但这不是您想要的。您想要解析十六进制对象 ID。为此,请使用以下函数:bson.ObjectIdHex()
databaseQuery := databasestructs.Find{
ID: bson.ObjectIdHex(request.FormValue("_id")),
MongoCollection: "users",
Criteria: "_id",
CriteriaValue: "",
FindAll: false,
}
请注意,bson.ObjectIdHex()如果传递的字符串是无效的十六进制对象 ID,则会出现恐慌。用于bson.IsObjectIdHex()在调用之前进行检查bson.ObjectId()。
如果您想使用官方驱动程序而不是mgo,您可以使用primitive.ObjectIDFromHex()函数来创建ObjectId,例如:
id, err := primitive.ObjectIDFromHex(request.FormValue("_id"))
if err != nil {
// Handle error
return
}
// If no error, you may use it:
databaseQuery := databasestructs.Find{
ID: id,
// ...
}
- 1 回答
- 0 关注
- 285 浏览
添加回答
举报
