在 Mongo 資料庫中,透過唯一識別碼(稱為「_id」欄位)來尋找特定文件是一項常見任務。這裡有一個關於如何使用 mgo(Go 的流行 MongoDB 驅動程式)來完成此操作的綜合指南。
FindId() 方法專門設計用於取得基於文件的文件在其「_id」欄位上。它採用 bson.ObjectId 類型的參數或表示 ObjectId 的字串。不過,需要注意的是,使用 FindId() 方法時,您應該只提供 ObjectId 值,而不是整個 bson.M{} 映射作為參數。
在您的程式碼中,問題在於 FindId() 方法的錯誤使用。以下是應該有效的更正後的程式碼:
err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)
或者,您可以使用Find() 方法並在bson.M{} 映射中指定「_id」欄位和值:
err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}). One(&data)
如果找到文檔,執行過程中不會遇到任何錯誤代碼。但是,如果程式碼仍然為 data.IdCookie 傳回 0 值,則表示資料庫中 id 的欄位名稱與您在結構中指定的欄位名稱不同。
為了確保 Go 結構體和 MongoDB 文件之間正確映射,您應該使用結構體標籤。例如,如果資料庫中的“_id”欄位名為“myid”,您可以將其對應到您的結構體,如下所示:
type id_cookie struct { IdCookie int `bson:"myid"` }
為了提高效能,您應該考慮避免每個查詢與MongoDB 伺服器建立多個連線。建立單一會話並將其重複用於多個查詢可以顯著加快操作速度。有關優化連接處理的更多信息,請參閱:[mgo - 查詢性能似乎一直很慢(500-650ms)](https://github.com/mongodb/mongo-go-driver/issues/1028)
以上是如何使用mgo的FindId()方法透過ID高效檢索MongoDB文檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!