Overview
En esta guía, puede aprender cómo actualizar documentos en MongoDB mediante operaciones de actualización.
Las operaciones de actualización modifican los campos que se especifican, dejando los demás campos y valores sin cambios.
En MongoDB, todos los métodos para modificar documentos siguen el mismo patrón:

Nota
Marcador de posición
changeX es un marcador de posición y no un método real.
El patrón espera que usted:
Especifique un filtro de query para hacer coincidir uno o más documentos para modificar.
Especifique los cambios de campo y valor.
Especifique opciones, si debe modificar el comportamiento del método.
El driver proporciona los siguientes métodos para actualizar documentos:
UpdateByID()Actualiza un único documento según su_id.UpdateOne()Actualiza un único documento.UpdateMany(): actualiza varios documentos.
Una nota sobre _id
Cada documento de una colección de MongoDB tiene un campo _id único e inmutable. No se pueden usar operaciones de actualización para modificar el campo _id. Si se intenta modificar este campo, los métodos de actualización devuelven un WriteError.
Parámetros
Cada método utiliza un documento de actualización que incluye al menos un operador de actualización. El operador de actualización especifica el tipo de actualización que se realizará. El documento de actualización también incluye los campos y valores que describen el cambio. Los documentos de actualización utilizan el siguiente formato:
bson.D{{"<update operator>", bson.D{{"<field>", <value>}, {"<field>", <value>}, ... }}, {"<update operator>", ... }, ... }
Consulta el manual del servidor de MongoDB para obtener Lista completa de operadores de actualización y descripciones.
Tip
UpdateOne() actualiza el primer documento que coincida con el filtro de query que proporciones. Para asegurarse de actualizar el documento correcto, se puede utilizar la opción sort para especificar el orden en que la operación encuentra los documentos. Para obtener más información, vea la documentación de UpdateOneOptions.
Nota
Pipelines de agregación en operaciones de actualización
Puedes usar pipelines de agregación compuestos por un subconjunto de etapas de agregación en operaciones de actualización. Para aprender más sobre las etapas de agregación que MongoDB soporta en pipelines de agregación, consulta el tutorial sobre cómo realizar Actualizaciones con Pipeline de Agregación tutorial en el Manual del Servidor.
Return Values
UpdateOne()UpdateByID() y UpdateMany() devuelven un tipo UpdateResult que contiene información sobre la operación de actualización si la operación es exitosa. El UpdateResult tipo contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| El número de documentos coincidentes con el filtro |
| El número de documentos modificados por la operación |
| El número de documentos actualizados por la operación |
| El |
Si varios documentos coinciden con el filtro de query que se pasa a UpdateOne(), el método selecciona y actualiza el primer documento que coincida. Si ningún documento coincide con el filtro de query, la operación de actualización no realiza ningún cambio.
Ver el Guía de upsert para aprender cómo insertar un nuevo documento si ningún documento coincide con el filtro de consulta.
Ejemplo de UpdateOne()
El siguiente ejemplo utiliza la listingsAndReviews colección del conjunto de datos de los sample_airbnb conjuntos de datos de muestra de Atlas. El siguiente documento describe un anuncio de Airbnb:
{ "_id": "10006546", "listing_url": "https://www.airbnb.com/rooms/10006546", "name": "Ribeira Charming Duplex", "summary": "Fantastic duplex apartment with three bedrooms, located in the historic area of Porto, Ribeira (Cube)...", ... "minimum_nights": "2", "maximum_nights": "30", ... "accommodates": 8, ... }
El siguiente ejemplo usa el método UpdateOne() para:
Busca en el documento donde el valor de
_ides"10006546".Establezca el campo
nameen"Ribiera River View Duplex".Incrementar el valor del campo
accommodatesen1.
filter := bson.D{{"_id", "10006546"}} update := bson.D{{"$set", bson.D{{"name", "Ribiera River View Duplex"}}}, {"$inc", bson.D{{"accomodates", 1}}}} result, err := collection.UpdateOne(context.TODO(), filter, update) fmt.Printf("Documents matched: %v\n", result.MatchedCount) fmt.Printf("Documents updated: %v\n", result.ModifiedCount)
Documents matched: 1 Documents updated: 1
A continuación se muestra el documento actualizado resultante de la operación de actualización anterior:
{ "_id": "10006546", "listing_url": "https://www.airbnb.com/rooms/10006546", "name": "Ribeira River View Duplex", "summary": "Fantastic duplex apartment with three bedrooms, located in the historic area of Porto, Ribeira (Cube)...", ... "minimum_nights": "2", "maximum_nights": "30", ... "accommodates": 9, ... }
Ejemplo de UpdateOne(): Archivo completo
Nota
Configuración de ejemplo
Este ejemplo se conecta a una instancia de MongoDB utilizando un URI de conexión. Para aprender más sobre cómo conectarte a tu instancia de MongoDB, consulta Crear un MongoClient. Este ejemplo también utiliza la colección restaurants en la base de datos sample_restaurants incluida en los conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en el nivel gratuito de MongoDB Atlas siguiendo los pasos en Introducción a Atlas.
El siguiente ejemplo es un archivo completamente ejecutable que realiza las siguientes acciones en la colección restaurants:
Encuentra un documento con un valor específico
_idActualiza el valor del campo
avg_ratingdel documento coincidente
// Updates the first document that matches a query filter by using the Go driver package main import ( "context" "fmt" "log" "os" "github.com/joho/godotenv" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" ) // Defines a Restaurant struct as a model for documents in the "restaurants" collection type Restaurant struct { ID bson.ObjectID `bson:"_id"` Name string `bson:"name"` AverageRating float64 `bson:"avg_rating,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/connect/mongoclient/#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") id, _ := bson.ObjectIDFromHex("5eb3d668b31de5d588f4292b") filter := bson.D{{"_id", id}} // Creates instructions to add the "avg_rating" field to documents update := bson.D{{"$set", bson.D{{"avg_rating", 4.4}}}} // Updates the first document that has the specified "_id" value result, err := coll.UpdateOne(context.TODO(), filter, update) if err != nil { panic(err) } // Prints the number of updated documents fmt.Printf("Documents updated: %v\n", result.ModifiedCount) // When you run this file for the first time, it should print output similar to the following: // Documents updated: 1 }
Documents updated: 1
Ejemplo de updateMany(): Archivo completo
Nota
Configuración de ejemplo
Este ejemplo se conecta a una instancia de MongoDB utilizando un URI de conexión. Para aprender más sobre cómo conectarte a tu instancia de MongoDB, consulta Crear un MongoClient. Este ejemplo también utiliza la colección restaurants en la base de datos sample_restaurants incluida en los conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en el nivel gratuito de MongoDB Atlas siguiendo los pasos en Introducción a Atlas.
El siguiente ejemplo es un archivo completamente ejecutable que realiza las siguientes acciones en la colección restaurants:
Busca documentos con el valor de campo
cuisinede"Pizza"y el valor de campoboroughde"Brooklyn"Actualiza el valor del campo
avg_ratingde los documentos coincidentes
// Updates documents that match a query filter by using the Go driver package main import ( "context" "fmt" "log" "os" "github.com/joho/godotenv" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" ) // Defines a Restaurant struct as a model for documents in the "restaurants" collection type Restaurant struct { ID bson.ObjectID `bson:"_id"` Name string `bson:"name"` Cuisine string `bson:"cuisine"` AverageRating float64 `bson:"avg_rating,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/connect/mongoclient/#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") filter := bson.D{{"cuisine", "Pizza"}, {"borough", "Brooklyn"}} // Creates instructions to update the values of the "avg_rating" field update := bson.D{{"$set", bson.D{{"avg_rating", 4.5}}}} // Updates documents in which the value of the "Cuisine" // field is "Pizza" result, err := coll.UpdateMany(context.TODO(), filter, update) if err != nil { panic(err) } // Prints the number of updated documents fmt.Printf("Documents updated: %v\n", result.ModifiedCount) // end updatemany // When you run this file for the first time, it should print output similar to the following: // Documents updated: 296 }
Documents updated: 296
Información Adicional
Para aprender más sobre las operaciones mencionadas, consulte las siguientes guías:
Para obtener más información sobre cómo actualizar elementos de arreglos, consulta Actualizar matrices en un documento.
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consultar la siguiente documentación de la API: