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 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
RestaurantIdpara 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
omitemptyomite 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.