Docs Menu
Docs Home
/ /

Usar etiquetas de struct

Puede especificar la forma en que el controlador Go convierte las estructuras Go a BSON mediante el uso de etiquetas de estructura.

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte Cree una guía de MongoClient. Este ejemplo también utiliza restaurants Colección en la sample_restaurants base de datos incluida en los conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en la versión gratuita de MongoDB Atlas siguiendo la Guía de introducción a Atlas.

Este ejemplo declara una estructura de tipo Restaurant con las siguientes etiquetas de estructura:

  • Una etiqueta de estructura que asigna el campo RestaurantId al nombre de campo BSON restaurant_id. De forma predeterminada, el controlador serializa los demás campos con la minúscula del nombre de campo de estructura.

  • La etiqueta de estructura omitempty omite el campo correspondiente del documento insertado cuando se deja vacía.

El siguiente código muestra la estructura Restaurant utilizada en el ejemplo:

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"`
}

El siguiente ejemplo crea una instancia Restaurant y la inserta en la colección restaurants. Durante la operación de inserción, el controlador interpreta las etiquetas de estructura para serializar el campo de estructura RestaurantId como restaurant_id y omite los campos vacíos en el documento de ejemplo:

// 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/es/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("...")

Después de ejecutar el ejemplo completo, podrá encontrar el siguiente documento en la colección restaurants:

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

Para obtener un ejemplo sobre cómo encontrar un documento, consulte la guía Buscar documentos.

Para obtener más información sobre el uso de etiquetas de estructura, la conversión a/desde BSON y el manejo de posibles errores, consulte la guía Trabajar con BSON.

Volver

Agregación