Overview
En esta guía podrás aprender a realizar una Inserción ascendente.
Datos de muestra
El ejemplo de esta guía utiliza lo siguiente Plant Estructura como modelo para los documentos de la colección plants:
type Plant struct { Species string PlantID int32 `bson:"plant_id"` Height float64 }
Para ejecutar el ejemplo de esta guía, cargue los datos de muestra en la colección db.plants con el siguiente fragmento:
coll := client.Database("db").Collection("plants") docs := []any{ Plant{Species: "Polyscias fruticosa", PlantID: 1, Height: 27.6}, Plant{Species: "Polyscias fruticosa", PlantID: 2, Height: 34.9}, Plant{Species: "Ledebouria socialis", PlantID: 1, Height: 11.4}, } result, err := coll.InsertMany(context.TODO(), docs)
Cada documento contiene una descripción de una planta individual que incluye la especie, el ID de la planta y la altura correspondiente a los campos species, plant_id y height en cada documento.
Tip
Bases de datos y colecciones inexistentes
Si la base de datos y la colección necesarias no existen cuando realiza una operación de escritura, el servidor las crea implícitamente.
Inserción
Las aplicaciones utilizan operaciones de inserción y actualización para almacenar y modificar datos. En ocasiones, es necesario elegir entre una operación de inserción y una de actualización según si el documento existe o no. MongoDB simplifica esta decisión con la opción upsert.
Un upsert realiza una de las siguientes acciones:
Actualiza los documentos que coinciden con su filtro de consulta
Inserta un nuevo documento si no hay coincidencias con su filtro de consulta
Puede especificar una operación de upsert pasando true al método SetUpsert() en las opciones de los siguientes métodos de operación de escritura:
UpdateOne()UpdateByID()UpdateMany()ReplaceOne()FindOneAndUpdate()FindOneAndReplace()
Tip
Si no especifica una operación upsert, no se produce ningún cambio en la operación de escritura cuando ningún documento coincide con el filtro de consulta. Esto equivale a pasar false al método SetUpsert().
Ejemplo
El siguiente ejemplo realiza las siguientes acciones:
Coincide con los documentos donde
specieses"Ledebouria socialis"yplant_ides3Actualiza el
heightdel documento coincidente a8.3Inserta este documento si no hay coincidencias con el filtro de consulta
filter := bson.D{{"species", "Ledebouria socialis"}, {"plant_id", 3}} update := bson.D{{"$set", bson.D{{"species", "Ledebouria socialis"}, {"plant_id", 3}, {"height", 8.3}}}} // Sets the upsert option to true opts := options.UpdateOne().SetUpsert(true) // Updates a documents or inserts a document if no documents are // matched and prints the results result, err := coll.UpdateOne(context.TODO(), filter, update, opts) if err != nil { panic(err) } fmt.Printf("Number of documents updated: %v\n", result.ModifiedCount) fmt.Printf("Number of documents upserted: %v\n", result.UpsertedCount)
Number of documents updated: 0 Number of documents upserted: 1
Si consulta la colección plants para ver todos los documentos, puede ver que, dado que el filtro de consulta no coincidió con ningún documento, se insertó un nuevo documento con los campos especificados:
{"species":"Polyscias fruticosa","plant_id":1,"height":27.6} {"species":"Polyscias fruticosa","plant_id":2,"height":34.9} {"species":"Ledebouria socialis","plant_id":1,"height":11.4} {"species":"Ledebouria socialis","plant_id":3,"height":8.3}
Información Adicional
Para obtener más información sobre las operaciones mencionadas, consulte las siguientes guías:
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos mencionados en esta guía, consulte la siguiente documentación de API: