首頁 >後端開發 >Golang >為什麼我的 Go 程式在使用 mgo 按 ID 檢索文件時出現「ObjectIDs Must Be Exactly 12 Bytes Long」錯誤?

為什麼我的 Go 程式在使用 mgo 按 ID 檢索文件時出現「ObjectIDs Must Be Exactly 12 Bytes Long」錯誤?

DDD
DDD原創
2024-10-29 17:59:02327瀏覽

Why Does My Go Program Get

無法在Go 中使用mgo 檢索文件ID

問題:

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn