Rumah >pembangunan bahagian belakang >Golang >Mengapa `mgo.FindId` Tidak Menemui Dokumen MongoDB Saya?
Mencari Dokumen melalui ID dengan mgo
Soalan:
Dalam contoh kod di bawah , rekod yang diketahui wujud dalam koleksi MongoDB tidak boleh ditemui menggunakan kaedah FindId. Kod tersebut mengembalikan nilai sifar. Apakah isunya?
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 }
Jawapan:
Isunya terletak pada tandatangan kaedah FindId. Ia hanya memerlukan ID sebagai hujah, manakala Cari memerlukan peta di mana nama medan dinyatakan juga. Untuk membetulkannya, gunakan kod berikut:
err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data) // OR err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data)
Jika tiada ralat berlaku, dokumen telah berjaya ditemui. Jika medan IdCookie masih sifar, ia mungkin disimpan dengan nama lain dalam MongoDB. Gunakan teg struct untuk memetakannya dengan betul:
type id_cookie struct { IdCookie int `bson:"myid"` }
Selain itu, disyorkan untuk mewujudkan satu sambungan ke MongoDB dan menggunakannya semula, dan bukannya membuat sambungan baharu untuk setiap pertanyaan. Rujuk perbincangan terpaut untuk mendapatkan butiran lanjut tentang pengoptimuman prestasi pertanyaan.
Atas ialah kandungan terperinci Mengapa `mgo.FindId` Tidak Menemui Dokumen MongoDB Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!