Overview
En esta guía, puede aprender cómo modificar documentos en MongoDB mediante operaciones de actualización y reemplazo.
Las operaciones de actualización modifican los campos especificados, dejando los demás campos y valores sin modificar. Las operaciones de reemplazo eliminan todos los campos existentes excepto... _id en un documento y sustituya los campos eliminados con los nuevos campos y valores que especifique.
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 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 de una colección de MongoDB tiene un campo _id único e inmutable. No se pueden usar las operaciones de actualización y reemplazo para modificar el campo _id. Si se intenta modificar 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.
Utilice 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 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.
Nota
Pipelines de agregación en operaciones de actualización
Si utiliza MongoDB Server versión 4.2 o posterior, puede usar pipelines de agregación compuestos por un subconjunto de etapas de agregación en las operaciones de actualización. Para obtener más información sobre las etapas de agregación que MongoDB admite en los pipelines de agregación, consulte 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 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 nuestro Guía de upsert para aprender cómo insertar un nuevo documento si ningún documento coincide con el filtro de consulta.
Ejemplo
El siguiente documento describe a un empleado:
{ "_id" : 2158, "name" : "Mary Shelley", "department" : "Marketing", "role" : "Marketing Analyst", "bonus" : 2500, ... }
El siguiente ejemplo utiliza el método UpdateByID() para:
Coincide con el documento donde el valor
_ides 2158.Establezca el campo
nameen "Mary Wollstonecraft Shelley" y el camporoleen "Director de marketing".Incrementa 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
A continuación se 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
Utilice el método ReplaceOne() para reemplazar un solo documento.
Parámetros
ReplaceOne() Espera un documento de reemplazo, que es el documento que se desea que sustituya a un documento existente. Los documentos de reemplazo utilizan 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 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 ReplaceOne(), el método selecciona y reemplaza el primer documento coincidente. La operación de reemplazo falla si ningún documento coincide con el filtro de consulta.
Ejemplo
El siguiente documento describe un artículo 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 "Cup" 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 obtener ejemplos ejecutables de las operaciones de actualización y reemplazo, consulte los siguientes ejemplos de uso:
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: