問題:
在Go 程式中使用mgo 庫與Mongogo 庫資料庫互動時,透過ID 檢索文件的程式碼失敗並出現錯誤:「ObjectID 的長度必須恰好為12 個位元組(得到24)」。資料庫中存在指定ID的文檔,但查詢沒有傳回任何結果。
問題代碼:
<code class="go">session.SetMode(mgo.Monotonic, true) coll := session.DB("aaaw_web").C("cron_emails") var result Result fmt.Printf("%v", message.ID) err = coll.FindId(bson.ObjectId(message.ID)).One(&result) fmt.Printf("%v", result) fmt.Println(err)</code>
原因:
錯誤訊息表明提供的 ID 不是有效的 ObjectId。在這種情況下,問題在於將字串 ID 轉換為 bson.ObjectId。
解:
將 ObjectId 的字串表示正確轉換為bson.ObjectId,使用 bson.ObjectIdHex() 函數。
<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
此函數接受包含 ObjectId 的十六進位表示形式的字串,並傳回有效的 bson.ObjectId 值。
說明:
bson.ObjectId 是一個 12 位元組值,表示為 24 個十六進位字元的字串。原始程式碼中執行的類型轉換將 24 字元字串解釋為 bson.ObjectId 的原始數據,這導致了無效的 24 位元組 ObjectId。使用 bson.ObjectIdHex() 確保字串被正確解析並轉換為具有適當位元組長度的有效 ObjectId。
以上是為什麼我的 Go 程式在使用 mgo 按 ID 檢索文件時出現「ObjectIDs Must Be Exactly 12 Bytes Long」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!