Soalan: Saya ingin mencari data mengikut _id. Saya tahu bahawa data ini wujud dan _id ini wujud (saya telah mengujinya dengan pymongo). Walau bagaimanapun, kod di bawah tidak menemuinya:
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() // Optional. Switch the session to a monotonic behavior. session.SetMode(mgo.Monotonic, true) c := session.DB("id_bag").C("id_cookie") data := id_cookie{} err2 := c.FindId(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data) if (err2 != nil){ Info.Println("error") Info.Println(err2) } Info.Println(data) return data.IdCookie }
Jawapan: Terdapat dua cara untuk mencari melalui id menggunakan Collection.FindId() atau Collection.Find().
Menggunakan Collection.FindId(): Lulus hanya id nilai.
err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)
Menggunakan Collection.Find(): Tentukan nilai dengan nama medan.
err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}). One(&data)
Jika anda masih mendapat 0 sebagai nilai id_cookie.IdCookie, ini bermakna medan dalam dokumen yang memegang id ini mempunyai nama yang berbeza. Gunakan tag struct untuk memetakannya dengan sewajarnya.
type id_cookie struct { IdCookie int `bson:"myid"` }
Untuk mengelakkan isu prestasi, sambung ke pelayan MongoDB sekali dan gunakan semula sesi. Untuk butiran lanjut, rujuk urutan berikut: [mgo - prestasi pertanyaan kelihatan perlahan secara konsisten (500-650ms)](https://groups.google.com/forum/#!topic/golang-nuts/8_EH7KO_S4Y).
Atas ialah kandungan terperinci Mengapa kod Go saya menggunakan mgo gagal mencari dokumen MongoDB dengan _idnya, walaupun _id wujud?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!