Docs Menu
Docs Home
/ /

Insertar o Actualizar en una Operación Única

En esta guía podrás aprender a realizar una Inserción ascendente.

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.

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().

El siguiente ejemplo realiza las siguientes acciones:

  • Coincide con los documentos donde species es "Ledebouria socialis" y plant_id es 3

  • Actualiza el height del documento coincidente a 8.3

  • Inserta 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}

Para obtener más información sobre las operaciones mencionadas, consulte las siguientes guías:

  • Especifica un query

  • Update Documents

  • Operaciones compuestas

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:

Volver

Actualizar arreglos

En esta página