Rumah > pembangunan bahagian belakang > Golang > Mengapa Program My Go Mendapat Ralat \'ObjectIDs Mesti Tepat 12 Bait\' Apabila Mendapatkan Dokumen melalui ID Menggunakan mgo?

Mengapa Program My Go Mendapat Ralat \'ObjectIDs Mesti Tepat 12 Bait\' Apabila Mendapatkan Dokumen melalui ID Menggunakan mgo?

DDD
Lepaskan: 2024-10-29 17:59:02
asal
333 orang telah melayarinya

Why Does My Go Program Get

Tidak Dapat Mengambil ID Dokumen Menggunakan mgo dalam Go

Masalah:

Dalam program Go menggunakan perpustakaan mgo untuk berinteraksi dengan pangkalan data MongoDB, kod untuk mendapatkan semula dokumen melalui ID gagal dengan ralat: "ObjectIDs mestilah tepat 12 bait panjang (mendapat 24)". Dokumen dengan ID yang ditentukan wujud dalam pangkalan data, tetapi pertanyaan tidak mengembalikan sebarang hasil.

Kod Masalah:

<code class="go">session.SetMode(mgo.Monotonic, true)
coll := session.DB("aaaw_web").C("cron_emails")
var result Result
fmt.Printf("%v", message.ID)
err = coll.FindId(bson.ObjectId(message.ID)).One(&result)
fmt.Printf("%v", result)
fmt.Println(err)</code>
Salin selepas log masuk

Punca:

Mesej ralat menunjukkan bahawa ID yang diberikan bukan ObjectId yang sah. Dalam kes ini, masalahnya terletak pada penukaran ID rentetan kepada bson.ObjectId.

Penyelesaian:

Untuk menukar perwakilan rentetan ObjectId dengan betul kepada a bson.ObjectId, gunakan fungsi bson.ObjectIdHex().

<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
Salin selepas log masuk

Fungsi ini menerima rentetan yang mengandungi perwakilan heksadesimal ObjectId dan mengembalikan nilai bson.ObjectId yang sah.

Penjelasan:

Bson.ObjectId ialah nilai 12-bait yang diwakili sebagai rentetan 24 aksara perenambelasan. Penukaran jenis yang dilakukan dalam kod asal mentafsir rentetan 24 aksara sebagai data mentah untuk bson.ObjectId, yang mengakibatkan ObjectId 24-bait tidak sah. Menggunakan bson.ObjectIdHex() memastikan bahawa rentetan dihuraikan dengan betul dan ditukar menjadi ObjectId yang sah dengan panjang bait yang sesuai.

Atas ialah kandungan terperinci Mengapa Program My Go Mendapat Ralat \'ObjectIDs Mesti Tepat 12 Bait\' Apabila Mendapatkan Dokumen melalui ID Menggunakan mgo?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan