首頁  >  文章  >  後端開發  >  為什麼 mgo.FindId() 檢索不到十六進位物件 ID 的文件?

為什麼 mgo.FindId() 檢索不到十六進位物件 ID 的文件?

Patricia Arquette
Patricia Arquette原創
2024-10-31 07:17:30135瀏覽

Why Does mgo.FindId() Fail to Retrieve Documents with a Hexadecimal Object ID?

使用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 位元組值由以下元件組成:

  • 4 個位元組的時間戳,表示物件建立的時間
  • 3 個位元組的機器識別碼
  • 2 個位元組的進程標識符
  • 3 個位元組的隨機位元組

將十六進位字串轉換為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中文網其他相關文章!

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