Overview
En esta guía, puedes aprender cómo realizar un Inserción ascendente.
Datos de muestra
El ejemplo en 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, carga los datos de muestra en la colección db.plants con el siguiente snippet:
coll := client.Database("db").Collection("plants") docs := []interface{}{ 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 realizas una operación de guardar, 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 documentos que coinciden con tu filtro de query
Inserta un nuevo documento si no hay coincidencias con tu filtro de query
Se puede especificar una inserción pasando true al método SetUpsert() en las opciones de los siguientes métodos de operaciones 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 documentos donde
specieses "Ledebouria socialis" yplant_ides3Actualiza el
heightdel documento coincidente a8.3Inserta este documento si no encuentra coincidencias con el filtro de query.
filter := bson.D{{"species", "Ledebouria socialis"}, {"plant_id", 3}} update := bson.D{{"$set", bson.D{{"species", "Ledebouria socialis"}, {"plant_id", 3}, {"height", 8.3}}}} opts := options.Update().SetUpsert(true) 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 consultas la colección plants para ver todos los documentos, puedes observar que, dado que el filtro de query 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 aprender más 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: