1 回答

TA貢獻1828條經驗 獲得超3個贊
請注意,labix.org/v2/mgo
不再維護,如果您想使用mgo
,請github.com/globalsign/mgo
改用?;蛘咝碌墓俜絤ongo-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 關注
- 211 瀏覽
添加回答
舉報