Docs Menu
Docs Home
/ /

Update Documents

En esta guía, puede aprender cómo actualizar documentos en una colección MongoDB mediante el uso de 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 consulta, que identifica los documentos que se deben actualizar. Para obtener más información sobre los filtros de consulta, consulte Especifique una guía de consulta.

  • Documento de actualización, que especifica el operador de actualización, o el tipo de actualización a realizar, y los campos y valores que se actualizarán. Para obtener una lista de operadores de actualización y sus usos, consulte Operadores de actualización de campo en el manual del servidor MongoDB.

Los ejemplos de esta guía utilizan el Updates constructor, una clase de fábrica que proporciona métodos auxiliares para construir documentos de actualización. Para obtener más información sobre el Updates constructor, consulte la guía "Constructores 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 constructor Updates para incrementar el valor del campo qty del documento coincidente 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 consulta pasado al updateOne() método, la operación actualiza solo el primer resultado. Para controlar con qué documento coincide la operación, puede especificar un orden de clasificación. Para obtener más información sobre la sort opción, consulte 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 constructor 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 de 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 consulta no coincide con ningún documento, el updateMany() método no realiza cambios en los documentos de la colección. Puede usar la upsert opción para insertar un nuevo documento si no hay coincidencias. Para ver un ejemplo que utiliza esta opción, consulte 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 la matriz de un documento, utilice el constructor Updates para especificar la actualización que desea realizar y los elementos de la matriz que desea actualizar. A continuación, llame 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 de la matriz que coincide con el filtro de consulta.

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

  • $[<identifier>]:Actualiza los elementos de la matriz que coinciden con un filtro.

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

Para actualizar el primer elemento de la matriz que coincida con su filtro de consulta, utilice el operador posicional ($) y especifique el campo de la matriz que desea actualizar en su filtro de consulta.

Este ejemplo realiza las siguientes acciones:

  • Coincide con un documento que tiene una matriz prices que contiene el valor 15.99

  • Utiliza el operador posicional $ para aumentar el primer valor en la matriz prices del documento coincidente en 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 de una matriz, utilice el operador posicional total ($[]).

Este ejemplo realiza las siguientes acciones:

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

  • Utiliza el operador posicional $[] para multiplicar todos los valores en la matriz prices del documento coincidente por 1.1

Volver

Texto de query

En esta página