Docs Menu
Docs Home
/ /

Modificar documentos

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:

Cambiar la firma del método

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)

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.

Utilice el método UpdateOne() o UpdateByID() para actualizar un único documento.

Utilice el método UpdateMany() para actualizar varios documentos.

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.

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

MatchedCount

El número de documentos coincidentes con el filtro

ModifiedCount

El número de documentos modificados por la operación

UpsertedCount

El número de documentos insertados por la operación

UpsertedID

El _id del documento insertado, o nil si no hay ninguno

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.

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 _id es 2158.

  • Establezca el campo name en "Mary Wollstonecraft Shelley" y el campo role en "Director de marketing".

  • Incrementa el valor del campo bonus en 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,
...
}

Utilice el método ReplaceOne() para reemplazar un solo documento.

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>"}, ... }

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

MatchedCount

El número de documentos coincidentes con el filtro

ModifiedCount

El número de documentos modificados por la operación

UpsertedCount

El número de documentos insertados por la operación

UpsertedID

El _id del documento insertado, o nil si no hay ninguno

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.

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
}

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.

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:

Volver

Borrar

En esta página