Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Actualizar arreglos en un documento

En esta guía, puedes aprender cómo actualizar arreglos en un documento con el MongoDB Kotlin driver.

Para actualizar un arreglo, debe hacer lo siguiente:

  • Especifica la actualización que quieras realizar

  • Especifica a qué elementos de arreglo se debe aplicar la actualización.

  • Realiza una operación de actualización usando estas especificaciones

Las siguientes secciones incluyen ejemplos que actualizan este documento de muestra:

{ "_id": 1, "color": "green", "qty": [8, 12, 18] }

Estos datos se modelan con la siguiente clase de datos de Kotlin:

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

Los ejemplos de esta página usan el método findOneAndUpdate() de la clase MongoCollection para recuperar y actualizar el documento. Cada ejemplo utiliza una instancia de la clase FindOneAndUpdateOptions para que MongoDB recupere el documento después de que se produzca la actualización. Para obtener más información sobre el método findOneAndUpdate(), consulta nuestra Guía de operaciones compuestas.

Para especificar una actualización, utiliza el generador Updates. El constructor Updates ofrece métodos utilitarios estáticos para crear especificaciones de actualización.

Para obtener más información sobre cómo usar el generador Updates con arreglos, consulta nuestra guía sobre el generador de actualizaciones.

El siguiente ejemplo realiza estas acciones:

  • query para el documento de muestra

  • Agregar "17" al arreglo qty en el documento que coincide con el filtro de query.

val filter = Filters.eq("_id", 1)
val update = Updates.push(PaintOrder::qty.name, 17)
val options = FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER)
val result = collection.findOneAndUpdate(filter, update, options)
print(result)
PaintOrder(id=1, qty=[8, 12, 18, 17], color=green)

Se puede especificar cuáles elementos de un arreglo actualizar usando un operador posicional. Los operadores posicionales pueden especificar el primer, todos o ciertos elementos del arreglo para actualizar.

Para especificar elementos en un arreglo con operadores posicionales, utiliza la notación de puntos. La notación de puntos es una sintaxis de acceso a propiedades para navegar objetos BSON.

Para obtener información adicional, consulte la entrada de manual del servidor en notación de puntos.

Para actualizar el primer elemento del arreglo que coincida con tu filtro de query, utiliza el operador posicional $. El campo de arreglo debe aparecer como parte de su filtro de query para utilizar el operador posicional $.

El siguiente ejemplo realiza estas acciones:

  • Query por un documento con un campo qty que contenga el valor "18"

  • Decrementa el primer valor del arreglo en el documento que coincida con el filtro de query en “3”

val filter = Filters.eq(PaintOrder::qty.name, 18)
val update = Updates.inc("${PaintOrder::qty.name}.$", -3)
val options = FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER)
val result = collection.findOneAndUpdate(filter, update, options)
print(result)
PaintOrder(id=1, qty=[8, 12, 15], color=green)

Para obtener más información sobre los métodos y operadores mencionados en esta sección, consulte los siguientes recursos:

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

El siguiente ejemplo realiza estas acciones:

  • query para el documento de muestra

  • Multiplicar los elementos del arreglo que coincidan con el filtro de query por "2"

val filter = Filters.eq("_id", 1)
val update = Updates.mul("${PaintOrder::qty.name}.$[]", 2)
val options = FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER)
val result = collection.findOneAndUpdate(filter, update, options)
println(result)
PaintOrder(id=1, qty=[16, 24, 36], color=green)

Para obtener más información sobre los métodos y operadores mencionados en esta sección, consulte los siguientes recursos:

Para actualizar los elementos de un arreglo que coinciden con un filtro, utiliza el operador posicional filtrado $[<identifier>]. Se debe incluir un filtro de arreglo en la operación de actualización para especificar qué elementos del arreglo deben actualizarse.

El <identifier> es el nombre que se le da al filtro de arreglo. Este valor debe comenzar con una letra minúscula y contener solo caracteres alfanuméricos.

El siguiente ejemplo realiza estas acciones:

  • query para el documento de muestra

  • Establecer un filtro de arreglo para buscar valores menores que "15"

  • Incrementar los elementos del arreglo que coincidan con el filtro de query en "5"

val filter = Filters.eq("_id", 1)
val smallerFilter = Filters.lt("smaller", 15)
val options = FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER)
.arrayFilters(listOf(smallerFilter))
val update = Updates.inc("${PaintOrder::qty.name}.$[smaller]", 5)
val result = collection.findOneAndUpdate(filter, update, options)
println(result)
PaintOrder(id=1, qty=[13, 17, 18], color=green)

Para obtener más información sobre los métodos y operadores mencionados en esta sección, consulte los siguientes recursos: