首頁 >後端開發 >Golang >為什麼 `mgo.FindId` 找不到我的 MongoDB 文件?

為什麼 `mgo.FindId` 找不到我的 MongoDB 文件?

Barbara Streisand
Barbara Streisand原創
2024-12-07 18:42:15172瀏覽

Why Doesn't `mgo.FindId` Find My MongoDB Document?

使用mgo 透過ID 尋找文件

問題:

問題:
type id_cookie struct {
    IdCookie int
}

func get_id_mongo() int {
    session, err := mgo.Dial("127.0.0.1")
    if err != nil {
        panic(err)
    }
    defer session.Close()

    c := session.DB("id_bag").C("id_cookie")
    data := id_cookie{}
    err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)
    if (err2 != nil){
        Info.Println("error")
        Info.Println(err2)
    }
    Info.Println(data)
    return data.IdCookie
}

在下面的程式碼範例中,使用FindId 方法無法找到MongoDB 集合中已知存在的記錄。該程式碼反而回傳零值。這是什麼問題?

答案:
err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)

// OR
err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data)

問題出在 FindId 的方法簽名。它只需要 ID 作為參數,而 Find 需要一個映射,其中還指定了欄位名稱。要解決此問題,請使用以下程式碼:
type id_cookie struct {
    IdCookie int `bson:"myid"`
}

如果沒有發生錯誤,則已成功找到文件。如果 IdCookie 欄位仍然為零,則它可能以不同的名稱儲存在 MongoDB 中。使用結構標籤正確地​​對應它:此外,建議建立與 ​​MongoDB 的單一連接並重複使用它,而不是為每個查詢建立一個新連接。有關查詢效能最佳化的更多詳細信息,請參閱連結的討論。

以上是為什麼 `mgo.FindId` 找不到我的 MongoDB 文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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