Rumah > pembangunan bahagian belakang > Golang > Mengapa kod Go saya menggunakan mgo gagal mencari dokumen MongoDB dengan _idnya, walaupun _id wujud?

Mengapa kod Go saya menggunakan mgo gagal mencari dokumen MongoDB dengan _idnya, walaupun _id wujud?

Barbara Streisand
Lepaskan: 2024-12-30 22:12:15
asal
375 orang telah melayarinya

Why is my Go code using mgo failing to find a MongoDB document by its _id, even though the _id exists?

Cari mengikut id dengan mgo

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
}
Salin selepas log masuk

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)
Salin selepas log masuk

Menggunakan Collection.Find(): Tentukan nilai dengan nama medan.

err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).
    One(&data)
Salin selepas log masuk

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"`
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan