Overview
En esta guía, puede aprender cómo actualizar documentos en MongoDB mediante operaciones de actualización.
Las operaciones de actualización cambian los campos que usted especifica, mientras que otros campos y valores permanecen 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 consulta para que coincida con 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 controlador proporciona los siguientes métodos para actualizar documentos:
UpdateByID():Actualiza un solo documento en función de su_id.UpdateOne():Actualiza un solo 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>", ... }, ... }
Consulte el manual del servidor MongoDB para obtener más información. 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 esta se realiza correctamente. El tipo UpdateResult 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 insertados por la operación |
| El |
Si varios documentos coinciden con el filtro de consulta pasado a UpdateOne(), el método selecciona y actualiza el primer documento coincidente. Si ningún documento coincide con el filtro de consulta, la operación de actualización no realiza cambios.
Vea 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 utiliza el método UpdateOne() para:
Coincide con el documento donde el valor
_ides"10006546".Establezca el campo
nameen"Ribiera River View Duplex".Incrementa 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 mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte la guía "Crear un MongoClient". Este ejemplo también utiliza la restaurants colección de la sample_restaurants base de datos incluida en los conjuntos de datos de ejemplo 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.
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 mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte la guía "Crear un MongoClient". Este ejemplo también utiliza la restaurants colección de la sample_restaurants base de datos incluida en los conjuntos de datos de ejemplo 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.
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 obtener más información 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: