Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Menu Docs
Página inicial do Docs
/ /

Usar tags estruturadas

Você pode especificar a maneira como o Go Driver converte as estruturas Go em BSON usando tags estrutura.

Observação

Exemplo de configuração

Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como conectar à sua instância MongoDB, consulte Criar um MongoClient. Este exemplo também utiliza a coleção restaurants no banco de dados sample_restaurants incluído nos conjuntos de dados de amostra do Atlas. Você pode carregá-los em seu banco de dados na camada grátis do MongoDB Atlas seguindo as etapas em Introdução ao Atlas.

Este exemplo declara uma estrutura do tipo Restaurant com as seguintes marcações de estrutura:

  • Uma marcação estruturada que mapeia o campo RestaurantId para o nome de campo BSON restaurant_id. Por padrão, o driver transfere os outros campos como a letra minúscula do nome do campo da estrutura.

  • A tag struct omitempty omite o campo correspondente do documento inserido quando deixado vazio.

O código a seguir mostra a estrutura Restaurant usada no exemplo:

type Restaurant struct {
Name string
RestaurantId string `bson:"restaurant_id,omitempty"`
Cuisine string `bson:"cuisine,omitempty"`
Address interface{} `bson:"address,omitempty"`
Borough string `bson:"borough,omitempty"`
Grades []interface{} `bson:"grades,omitempty"`
}

O exemplo a seguir cria uma instância Restaurant e a insere na coleção restaurants. Durante a operação de inserção, o driver interpreta as marcações de estrutura para organizar o campo de estrutura RestaurantId como restaurant_id e omite os campos que são deixados vazios no documento de amostra:

// Specifies struct tags on a struct by using the Go driver
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/joho/godotenv"
"go.mongodb.org/mongo-driver/v2/mongo"
"go.mongodb.org/mongo-driver/v2/mongo/options"
)
// Specifies a different name for RestaurantID
// and marks certain fields as omitempty
type Restaurant struct {
Name string
RestaurantId string `bson:"restaurant_id,omitempty"`
Cuisine string `bson:"cuisine,omitempty"`
Address interface{} `bson:"address,omitempty"`
Borough string `bson:"borough,omitempty"`
Grades []interface{} `bson:"grades,omitempty"`
}
func main() {
if err := godotenv.Load(); err != nil {
log.Println("No .env file found")
}
var uri string
if uri = os.Getenv("MONGODB_URI"); uri == "" {
log.Fatal("You must set your 'MONGODB_URI' environment variable. See\n\t https://www.mongodb.com/pt-br/docs/drivers/go/current/usage-examples/#environment-variable")
}
client, err := mongo.Connect(options.Client().ApplyURI(uri))
if err != nil {
panic(err)
}
defer func() {
if err = client.Disconnect(context.TODO()); err != nil {
panic(err)
}
}()
coll := client.Database("sample_restaurants").Collection("restaurants")
// Creates a Restaurant document
newRestaurant := Restaurant{
Name: "Amazing Pizza",
RestaurantId: "123456789",
Cuisine: "American",
}
// Inserts the sample document describing a restaurant into the collection
result, err := coll.InsertOne(context.TODO(), newRestaurant)
if err != nil {
panic(err)
}
// Prints the ID of the inserted document
fmt.Printf("Document inserted with ID: %s\n", result.InsertedID)
// When you run this file, it should print:
// Document inserted with ID: ObjectID("...")
}
Document inserted with ID: ObjectID("...")

Após executar o exemplo completo, você pode encontrar o seguinte documento na collection restaurants:

{
"_id" : ObjectId("..."),
"name" : "Amazing Pizza",
"restaurant_id" : "123456789",
"cuisine" : "American
}

Para obter um exemplo de como localizar um documento, consulte o guia Como localizar documentos.

Para saber mais sobre o uso de marcações de estrutura, conversão de/para BSON e tratamento de possíveis erros, consulte o guia Trabalhar com BSON.

Voltar

Agregação