Você pode especificar a maneira como o Go Driver converte as estruturas Go em BSON usando tags estrutura.
Exemplo: Arquivo Completo
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 se conectar à sua instância do MongoDB, consulte o guia 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 o Guia de 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 BSONrestaurant_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("...")
Resultado esperado
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.
Informações adicionais
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.