使用Golang 的MGO 函式庫排除MongoDB ID 擷取問題
在Golang 中使用mgo 函式庫進行MongoDB 作業時,開發人員可能會遇到以下問題:無法使用FindId 方法查找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>
輸出:
595f2c1a6edcba0619073263 {ObjectIdHex("") 0 0 0 0 { 0 false 0 } 0 0 0 0 0 0 0} ObjectIDs must be exactly 12 bytes long (got 24) not found
儘管文件存在於 MongoDB 中,但程式碼無法檢索它。要解決此問題,了解 MongoDB 中物件 ID 的性質至關重要。
了解MongoDB 中的物件ID
MongoDB 中的物件ID 是12 位元組值由以下元件組成:
將十六進位字串轉換為MongoDB 物件ID
在提供的程式碼片段中,message.ID 的值為物件ID 的24 個字元的十六進位字串表示形式。要將此字串轉換為MongoDB 物件ID,必須使用bson.ObjectIdHex() 函數:
<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
結論
透過了解物件ID 的性質在MongoDB中並利用適當的函數在十六進位表示形式和物件ID 之間進行轉換,開發人員可以使用mgo 函式庫有效地檢索文件。
以上是為什麼 mgo.FindId() 檢索不到十六進位物件 ID 的文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!