Heim > Backend-Entwicklung > Golang > Warum erhält mein Go-Programm beim Abrufen von Dokumenten anhand der ID mit mgo die Fehlermeldung „Objekt-IDs müssen genau 12 Bytes lang sein'?

Warum erhält mein Go-Programm beim Abrufen von Dokumenten anhand der ID mit mgo die Fehlermeldung „Objekt-IDs müssen genau 12 Bytes lang sein'?

DDD
Freigeben: 2024-10-29 17:59:02
Original
329 Leute haben es durchsucht

Why Does My Go Program Get

Dokument-ID kann mit mgo in Go nicht abgerufen werden

Problem:

In einem Go-Programm, das die mgo-Bibliothek verwendet Wenn Sie mit einer MongoDB-Datenbank interagieren, schlägt der Code zum Abrufen eines Dokuments anhand der ID mit dem folgenden Fehler fehl: „ObjectIDs müssen genau 12 Bytes lang sein (erhielt 24)“. Ein Dokument mit der angegebenen ID ist in der Datenbank vorhanden, aber die Abfrage liefert keine Ergebnisse.

Problemcode:

<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>
Nach dem Login kopieren

Ursache:

Die Fehlermeldung weist darauf hin, dass die bereitgestellte ID keine gültige ObjectId ist. In diesem Fall liegt das Problem in der Konvertierung der String-ID in eine bson.ObjectId.

Lösung:

So konvertieren Sie eine String-Darstellung einer ObjectId ordnungsgemäß in a bson.ObjectId, verwenden Sie die Funktion bson.ObjectIdHex().

<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
Nach dem Login kopieren

Diese Funktion akzeptiert eine Zeichenfolge, die die hexadezimale Darstellung der ObjectId enthält, und gibt einen gültigen bson.ObjectId-Wert zurück.

Erklärung:

Eine bson.ObjectId ist ein 12-Byte-Wert, der als Zeichenfolge mit 24 Hexadezimalzeichen dargestellt wird. Die im ursprünglichen Code durchgeführte Typkonvertierung interpretierte die 24-stellige Zeichenfolge als Rohdaten für die bson.ObjectId, was zu einer ungültigen 24-Byte-ObjectId führte. Durch die Verwendung von bson.ObjectIdHex() wird sichergestellt, dass die Zeichenfolge korrekt analysiert und in eine gültige ObjectId mit der entsprechenden Bytelänge konvertiert wird.

Das obige ist der detaillierte Inhalt vonWarum erhält mein Go-Programm beim Abrufen von Dokumenten anhand der ID mit mgo die Fehlermeldung „Objekt-IDs müssen genau 12 Bytes lang sein'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage