Przejdź do treści

Konwerter JSON na Go BSON — Numio

Przepisuje dokument JSON jako literał Go zbudowany z bson.M (obiekty) i bson.A (tablice) dla sterownika MongoDB Go, z końcowymi przecinkami wymaganymi przez Go. Klucze zachowują swoją kolejność, null staje się zerem, a ciągi znaków są kopiowane bez zmian.

Przenoszenie zapytania lub filtru MongoDB testowanego w mongosh lub Compass do kodu Go.

JSON

Go Bson

Kiedy go używać

  • Przenoszenie zapytania lub filtru MongoDB testowanego w mongosh lub Compass do kodu Go.
  • Zapisanie etapu agregacji lub dokumentu aktualizacji jako wbudowanego literału Go w teście.

Jak używać

  1. Wklej zapytanie, filtr lub dokument jako ścisłe JSON (klucze w cudzysłowie, bez pomocy powłoki ObjectId(...) lub ISODate(...)).
  2. Skopiuj literał bson.M{...} z panelu Go; operatory takie jak $gte, $in i $or są przechowywane jako klucze łańcuchowe.
  3. Zaimportuj go.mongodb.org/mongo-driver/bson i przekaż wartość do Find, UpdateOne lub Aggregate, edytując typy jak opisano poniżej.

Wejście JSON

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

Idź 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,
      },
    },
  },
}

Szczegóły i ograniczenia

JSON jest analizowany i przeglądany w przeglądarce w celu zbudowania dosłowności; nic nie jest wysyłane na serwer.

null staje się zerem. Liczby są stałymi Go bez typu, więc 18 staje się int, a 1,5 float64; liczby całkowite powyżej 2^53 tracą precyzję podczas analizowania JSON.

Ciągi znaków są zapisywane jako literały tekstowe Go, dlatego nawiasy wewnątrz nich, np. "tags[0]", pozostają bez zmian.

Wyprowadza bson.M, który jest nieuporządkowany. Użyj bson.D tam, gdzie liczy się kolejność pól, na przykład podczas sortowania dokumentów lub na niektórych etapach potoku.

FAQ

Czy mogę wkleić zapytanie mongosh za pomocą ObjectId() lub ISODate()?

Nie. Dane wejściowe muszą być poprawnym JSON, dlatego funkcje pomocnicze powłoki powodują błąd parsowania. Użyj zwykłych ciągów znaków, a następnie zastąp je w Go wartością ObjectID z zapisu szesnastkowego (primitive.ObjectIDFromHex w sterowniku v1) lub wartością time.Time.

Czy generuje struktury Go?

Nie, generuje tylko literały mapy i plasterka. W przypadku struktur tekstowych ze znacznikami json użyj strony JSON to Go.

Czy root musi być obiektem?

Nie. Tablica główna staje się bson.A{...}, co pasuje do potoku agregacji, gdzie każdy etap jest bson.M.

Specyfikacje i referencje