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 关注
- 147 浏览
添加回答
举报