Zum Inhalt springen

JSON in Go-Strukturen für BSON umwandeln — Numio

Schreibt ein JSON-Dokument als Go-Literal aus bson.M (Objekte) und bson.A (Arrays) für den MongoDB-Go-Treiber um, mit den in Go nötigen abschließenden Kommas. Schlüssel behalten ihre Reihenfolge, null wird zu nil und Strings werden unverändert übernommen.

Eine in mongosh oder Compass getestete MongoDB-Abfrage oder einen Filter in Go-Code übertragen.

JSON

Go Bson

Wann sie hilft

  • Eine in mongosh oder Compass getestete MongoDB-Abfrage oder einen Filter in Go-Code übertragen.
  • Eine Aggregation-Stage oder ein Update-Dokument in einem Test als Inline-Go-Literal schreiben.

Anwendung

  1. Füge die Abfrage, den Filter oder das Dokument als striktes JSON ein (Schlüssel in Anführungszeichen, keine Shell-Helfer wie ObjectId(...) oder ISODate(...)).
  2. Kopiere das bson.M{...}-Literal aus dem Go-Panel; Operatoren wie $gte, $in und $or bleiben als String-Schlüssel erhalten.
  3. Importiere go.mongodb.org/mongo-driver/bson und übergib den Wert an Find, UpdateOne oder Aggregate; passe Typen wie unten beschrieben an.

JSON-Eingabe

{
  "status": "active",
  "deletedAt": null,
  "age": { "$gte": 18 },
  "tags": { "$in": ["go", "mongo"] },
  "$or": [
    { "verified": true },
    { "score": { "$gt": 90 } }
  ]
}

Go bson.M / bson.A

bson.M{
  "status": "active",
  "deletedAt": nil,
  "age": bson.M{
    "$gte": 18,
  },
  "tags": bson.M{
    "$in": bson.A{
      "go",
      "mongo",
    },
  },
  "$or": bson.A{
    bson.M{
      "verified": true,
    },
    bson.M{
      "score": bson.M{
        "$gt": 90,
      },
    },
  },
}

Details und Einschränkungen

Das JSON wird in deinem Browser geparst und durchlaufen, um das Literal zu bauen; nichts wird an einen Server gesendet.

null wird zu nil. Zahlen sind untypisierte Go-Konstanten, sodass 18 zu int und 1.5 zu float64 wird; ganze Zahlen über 2^53 verlieren beim Parsen des JSON an Genauigkeit.

Strings werden als Go-String-Literale geschrieben, daher bleiben eckige oder geschweifte Klammern darin, etwa "tags[0]", unverändert.

Die Ausgabe ist bson.M, das ungeordnet ist. Verwende bson.D, wo die Feldreihenfolge zählt, etwa bei Sortierdokumenten oder einigen Pipeline-Stages.

FAQ

Kann ich eine mongosh-Abfrage mit ObjectId() oder ISODate() einfügen?

Nein. Die Eingabe muss gültiges JSON sein, Shell-Helfer führen daher zu einem Parse-Fehler. Verwende einfache Strings und ersetze sie in Go durch eine ObjectID aus Hex (primitive.ObjectIDFromHex in Treiber v1) oder einen time.Time-Wert.

Erzeugt es Go-Structs?

Nein, es erzeugt nur Map- und Slice-Literale. Für typisierte Structs mit json-Tags nutze die Seite JSON to Go.

Muss die oberste Ebene ein Objekt sein?

Nein. Ein Root-Array wird zu bson.A{...}, was zu einer Aggregation-Pipeline passt, in der jede Stage ein bson.M ist.

Spezifikationen und Referenzen