Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Update Documents

En esta guía, puede aprender cómo actualizar documentos en una colección de MongoDB utilizando el updateOne() y updateMany() métodos.

Los ejemplos de esta guía ejecutan operaciones en la colección paint_inventory, que almacena documentos que representan los colores de pintura del inventario de una tienda. Esta colección contiene los siguientes documentos de ejemplo:

{ "_id": 1, "color": "red", "qty": 5, "prices": [15.99, 19.99] }
{ "_id": 2, "color": "purple", "qty": 8, "prices": [18.99, 22.99] }
{ "_id": 3, "color": "yellow", "qty": 0, "prices": [14.99, 17.99] }
{ "_id": 4, "color": "green", "qty": 6, "prices": [19.99, 24.99] }
{ "_id": 5, "color": "blue", "qty": 3, "prices": [17.99, 21.99] }

La siguiente clase de datos de Kotlin modela los documentos de la colección:

data class PaintOrder(
@BsonId val id: Int,
val color: String,
val qty: Int,
val prices: List<Double>
)

Puede actualizar documentos en MongoDB utilizando los siguientes métodos:

  • updateOne(), que actualiza el primer documento que coincide con los criterios de búsqueda

  • updateMany(), que actualiza todos los documentos que coinciden con los criterios de búsqueda

Cada método de actualización requiere los siguientes parámetros:

  • Filtro de query, que se utiliza para determinar qué documentos se actualizarán. Para aprender más sobre los filtros de query, consulte el Guía 'Especificar una query' .

  • Documento de actualización, que especifica el operador de actualización o el tipo de actualización que se debe realizar, así como los campos y valores que deben ser actualizados. Para consultar una lista de operadores para actualizar y sus usos, véase la Operadores de actualización de campos en el manual del servidor de MongoDB.

Los ejemplos de esta guía utilizan el generador Updates, una clase de fábrica que proporciona métodos asistente para construir documentos de actualización. Para obtener más información sobre el generador de Updates, consulta la guía desarrolladores de actualizaciones.

Este ejemplo utiliza el método updateOne() para realizar las siguientes acciones:

  • Coincide con un documento en el que el valor del campo color es "yellow"

  • Utiliza el generador Updates para incrementar el valor del campo qty del documento que coincide en 1

val filter = Filters.eq(PaintOrder::color.name, "yellow")
val update = Updates.inc(PaintOrder::qty.name, 1)
val result = collection.updateOne(filter, update)
println("Matched document count: ${result.matchedCount}")
println("Modified document count: ${result.modifiedCount}")
Matched document count: 1
Modified document count: 1

Nota

Si varios documentos coinciden con el filtro de query pasado al método updateOne(), la operación actualiza solo el primer resultado. Para controlar con qué documento coincide la operación, puedes especificar un orden de clasificación. Para obtener más información sobre la opción sort, consulta la página Ordenar resultados.

El siguiente ejemplo utiliza el método updateMany() para realizar las siguientes acciones:

  • Coincide con todos los documentos utilizando un filtro de consulta vacío

  • Utiliza el generador Updates para aumentar el valor del campo qty en 20 en todos los documentos coincidentes

val filterMany = Filters.empty()
val updateMany = Updates.inc(PaintOrder::qty.name, 20)
val resultMany = collection.updateMany(filterMany, updateMany)
println("Matched document count: ${resultMany.matchedCount}")
println("Modified document count: ${resultMany.modifiedCount}")
Matched document count: 5
Modified document count: 5

Después de la operación de actualización, los documentos en la colección paint_inventory tienen los siguientes valores:

{ "_id": 1, "color": "red", "qty": 25, "prices": [15.99, 19.99] }
{ "_id": 2, "color": "purple", "qty": 28, "prices": [18.99, 22.99] }
{ "_id": 3, "color": "yellow", "qty": 20, "prices": [14.99, 17.99] }
{ "_id": 4, "color": "green", "qty": 26, "prices": [19.99, 24.99] }
{ "_id": 5, "color": "blue", "qty": 23, "prices": [17.99, 21.99] }

Nota

Si el filtro de query no coincide con ningún documento, el método updateMany() no realiza modificaciones en los documentos de la colección. Puedes usar la opción upsert para insertar un nuevo documento si no hay coincidencias. Para ver un ejemplo que utiliza esta opción, consulta: Insertar o actualizar en una sola operación.

Importante

Los métodos updateOne() y updateMany() no pueden hacer cambios en un documento que violen las restricciones de índices únicos en la colección. Para obtener más información, consulta Índices únicos en el manual del servidor MongoDB.

Para actualizar los valores de un arreglo de un documento, utiliza el generador Updates para especificar la actualización que deseas realizar y los elementos del arreglo a actualizar. Luego, llama al método updateOne() o updateMany() para ejecutar la operación de actualización.

Puede especificar qué elementos de la matriz desea actualizar utilizando los siguientes operadores posicionales:

  • $: actualiza el primer elemento del arreglo que coincida con el filtro de query.

  • $[]: Actualiza todos los elementos de un arreglo.

  • $[<identifier>]Actualiza los elementos del arreglo que coinciden con un filtro.

Los ejemplos de esta sección muestran cómo usar cada operador posicional.

Para actualizar el primer elemento del arreglo que coincida con tu filtro de query, utiliza el operador posicional ($) y especifica el campo de arreglo a actualizar en tu filtro de query.

Este ejemplo realiza las siguientes acciones:

  • Obliga a que el documento tenga un arreglo prices que contenga el valor 15.99

  • Utiliza el operador posicional $ para incrementar el primer valor del arreglo prices en el documento coincidente por 2

val filterArrayFirst = Filters.eq(PaintOrder::prices.name, 15.99)
val updateArrayFirst = Updates.inc("${PaintOrder::prices.name}.$", 2)
val resultArrayFirst = collection.updateOne(filterArrayFirst, updateArrayFirst)
println("Modified document count: ${resultArrayFirst.modifiedCount}")
Modified document count: 1

Para actualizar todos los elementos en un arreglo, utiliza el operador posicional all ($[]).

Este ejemplo realiza las siguientes acciones:

  • Coincide con un documento que tiene un valor color de "green"

  • Usa el operador posicional $[] para multiplicar todos los valores del arreglo prices del documento coincide contra 1.1

Volver

Texto de query

En esta página