Overview
En esta guía, puedes aprender a modificar documentos en MongoDB utilizando operaciones de actualización y reemplazo.
Las operaciones de actualización cambian los campos que se especifican mientras dejan los demás campos y valores sin cambios. Las operaciones de reemplazo remueven todos los campos existentes excepto _id en un documento, sustituyendo los campos eliminados por los nuevos campos y valores que indiques.
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 tú:
Especifique un filtro de query para hacer coincidir uno o más documentos para modificar.
Especifique los cambios de campo y valor.
Especifique las opciones, si es necesario, modificar el comportamiento del método.
El driver proporciona los siguientes métodos para modificar documentos:
UpdateByID()UpdateOne()UpdateMany()ReplaceOne()BulkWrite()(no se discute en esta guía)FindOneAndUpdate()(no se discute en esta guía)FindOneAndReplace()(no se discute en esta guía)
Una nota acerca de _id
Cada documento en una colección de MongoDB tiene un campo _id único e inmutable. No puedes usar operaciones de actualizar y reemplazar para cambiar el campo _id. Si intentas cambiar este campo, los métodos de actualización y reemplazo devuelven un WriteError.
Update
Utilice el método UpdateOne() o UpdateByID() para actualizar un único documento.
Usa el método UpdateMany() para actualizar varios documentos.
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 a 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.
Nota
Pipelines de agregación en operaciones de actualización
Si utilizas MongoDB Server versión 4.2 o posterior, puedes usar los pipelines de agregación compuestos por un subconjunto de etapas de agregación en operaciones de actualización. Para obtener más información sobre las etapas de agregación que admite MongoDB en los pipelines de agregación, consulta nuestro tutorial sobre cómo realizar actualizaciones con pipelines de agregación
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 que coinciden 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.
Consulte nuestra Guía de upsert para aprender a insertar un nuevo documento si ningún documento coincide con el filtro de query.
Ejemplo
El siguiente documento describe a un empleado:
{ "_id" : 2158, "name" : "Mary Shelley", "department" : "Marketing", "role" : "Marketing Analyst", "bonus" : 2500, ... }
El siguiente ejemplo usa el método UpdateByID() para:
Busca en el documento donde el valor de
_ides 2158.Establezca el campo
namea "Mary Wollstonecraft Shelley" y el camporolea "Marketing Director".Incrementar el valor del campo
bonusen 2000.
filter := bson.D{{"_id", 2158}} update := bson.D{{"$set", bson.D{{"name", "Mary Wollstonecraft Shelley"}, {"role", "Marketing Director"}}}, {"$inc", bson.D{{"bonus", 2000}}}} 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
Lo siguiente muestra el documento actualizado resultante de la operación de actualización anterior:
{ "_id" : 2158, "name" : "Mary Wollstonecraft Shelley", "department" : "Marketing", "role" : "Marketing Director", "bonus" : 4500, ... }
Reemplaza
Utiliza el método ReplaceOne() para reemplazar un solo documento.
Parámetros
ReplaceOne() espera un documento de reemplazo, que es el documento que quieres que sustituya a un documento existente. Los documentos de reemplazo usan el siguiente formato:
bson.D{{"<field>", "<value>"}, {"<field>", "<value>"}, ... }
Return Values
ReplaceOne() devuelve un tipo UpdateResult que contiene información sobre la operación de reemplazo si la operación es exitosa. El tipo UpdateResult contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| El número de documentos que coinciden 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 pasado a ReplaceOne(), el método selecciona y reemplaza el primer documento coincidente. Tu operación de reemplazo falla si ningún documento coincide con el filtro de query.
Ejemplo
El siguiente documento describe un elemento de cocina:
{ "_id" : 2056, "item" : "Mug", "brand" : "Simply Ceramics", "price" : 2.99, "material" : "Glass" }
El siguiente ejemplo utiliza el método ReplaceOne() para sustituir este documento por uno que contiene un campo item con un valor de "Copa" y un campo quantity con un valor de 107:
filter := bson.D{{"_id", 2056}} replacement := bson.D{{"item", "Cup"}, {"quantity", 107}} result, err := collection.ReplaceOne(context.TODO(), filter, replacement) fmt.Printf("Documents matched: %v\n", result.MatchedCount) fmt.Printf("Documents replaced: %v\n", result.ModifiedCount)
Documents matched: 1 Documents replaced: 1
El documento reemplazado contiene el contenido del documento de reemplazo y el campo inmutable _id de la siguiente manera:
{ "_id" : 2056, "item" : "Cup", "quantity" : 107 }
Información Adicional
Para ejemplos ejecutables de las operaciones de actualización y reemplazo, consulta los siguientes ejemplos de uso:
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: