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
/ /
/ / /

Actualizaciones de desarrolladores

En esta guía, puedes aprender cómo especificar actualizaciones utilizando constructores en el controlador Kotlin de MongoDB.

La Updates builder proporciona métodos de asistente para los siguientes tipos de actualizaciones:

  • Actualizaciones de campo

  • Array Updates

  • Combinando múltiples operadores de actualización

Algunos métodos que esperan actualizaciones son:

  • updateOne()

  • updateMany()

  • bulkWrite()

La Updates clase proporciona métodos de fábrica estáticos para todos los operadores de actualización de MongoDB. Cada método devuelve una instancia del tipo BSON, que se puede pasar a cualquier método que espere un argumento de actualización.

Tip

Para abreviar, puedes optar por importar los métodos de la clase Actualizaciones:

import com.mongodb.client.model.Updates.*

Los ejemplos de esta guía utilizan el siguiente documento:

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Este ejemplo se modela según la siguiente clase de datos, a menos que se indique lo contrario:

data class PaintOrder (
@BsonId val id: Int,
val color: String,
val qty: Int?,
val vendor: List<Vendor>?,
val lastModified: LocalDateTime?
)
data class Vendor (
val name: String,
)

Tip

Métodos de construcción y propiedades de la clase de datos

Puedes utilizar los métodos de las clases builder directamente con las propiedades de la data class añadiendo la dependencia opcional de extensiones del driver de Kotlin a tu aplicación. Para obtener más información y ver ejemplos, consulta la guía Utilizar desarrolladores con clases de datos.

Utiliza el método set() para asignar el valor de un campo en una operación de actualización.

El siguiente ejemplo establece el valor del campo qty en 11:

val filter = Filters.eq("_id", 1)
val update = Updates.set(PaintOrder::qty.name, 11)
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 11,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utiliza el método unset() para borrar el valor de un campo en una operación de actualización.

El siguiente ejemplo elimina el campo qty:

val filter = Filters.eq("_id", 1)
val update = Updates.unset(PaintOrder::qty.name)
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utiliza el método setOnInsert() para asignar el valor de un campo en una operación de actualización durante la inserción de un documento.

El siguiente ejemplo establece el valor del campo color en "pink" si la operación resultó en la inserción de un documento:

val filter = Filters.eq("_id", 1)
val update = Updates.setOnInsert(PaintOrder::color.name, "pink")
collection.updateOne(filter, update, UpdateOptions().upsert(true))

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "pink"
}

Nota

Si el documento no se inserta, no se producirá ningún cambio.

Utilice el método inc() para incrementar el valor de un campo numérico en una operación de actualización.

El siguiente ejemplo incrementa el valor del campo qty, que era 5, en 3:

val filter = Filters.eq("_id", 1)
val update = Updates.inc(PaintOrder::qty.name, 3)
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 8,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utiliza el método mul() para multiplicar el valor de un campo numérico en una operación de actualización.

El siguiente ejemplo multiplica el valor del campo qty, que era 5, por 2:

val filter = Filters.eq("_id", 1)
val update = Updates.mul(PaintOrder::qty.name, 2)
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 10,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utiliza el método rename() para cambiar el valor de un campo en una operación de actualización.

El siguiente ejemplo cambia el nombre del campo qty a quantity:

val filter = Filters.eq("_id", 1)
val update = Updates.rename(PaintOrder::qty.name, "quantity")
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" },
"quantity": 5,
}

Utilice el método min() para establecer el valor del campo en el valor dado si el valor dado es menor que el valor actual del campo.

El siguiente ejemplo actualiza el campo qty a 2 porque 2 es menor que el valor actual del campo qty (5):

val filter = Filters.eq("_id", 1)
val update = Updates.min(PaintOrder::qty.name, 2)
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 2,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utilice el método max() para actualizar el valor de un campo con el número mayor de los dos especificados en una operación de actualización.

El siguiente ejemplo actualiza el campo qty a 8 porque 8 es mayor que el valor actual del campo qty (5):

val filter = Filters.eq("_id", 1)
val update = Updates.max(PaintOrder::qty.name, 8)
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 8,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utilice el método currentDate() para asignar el valor de un campo en una operación de actualización a la fecha actual como una fecha BSON.

El siguiente ejemplo establece el valor del campo lastModified en la fecha actual como una fecha BSON:

val filter = Filters.eq("_id", 1)
val update = Updates.currentDate(PaintOrder::lastModified.name)
collection.updateOne(filter, update)

Desde que escribimos esta página el 16 de junio de 2023, el ejemplo anterior actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"$date": "2023-06-16T17:13:06.373Z"
}

Utiliza el método currentTimestamp() para asignar el valor de un campo en una operación de actualización a la fecha actual, como un timestamp.

El siguiente ejemplo establece el valor del campo lastModified a la fecha actual como una marca de tiempo BSON:

// Create a new instance of the collection with the flexible `Document` type
// to allow for the changing of the `lastModified` field to a `BsonTimestamp`
// from a `LocalDateTime`.
val collection = database.getCollection<Document>("paint_orders")
val filter = Filters.eq("_id", 1)
val update = Updates.currentTimestamp(PaintOrder::lastModified.name)
collection.updateOne(filter, update)

Desde que escribimos esta página el 16 de junio de 2023, el ejemplo anterior actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"$timestamp": { "t": 1686935654, "i": 3 }
}

Utilice los métodos bitwiseOr(), bitwiseAnd() y bitwiseXor() para realizar una actualización bit a bit del valor entero de un campo en una operación de actualización.

El siguiente ejemplo realiza una operación bit a bit OR entre el número 10 y el valor entero del campo qty (5):

val filter = Filters.eq("_id", 1)
val update = Updates.bitwiseOr(PaintOrder::qty.name, 10)
collection.updateOne(filter, update)

La operación bit a bit da como resultado 15:

0101 // bit representation of 5
1010 // bit representation of 10
----
1111 // bit representation of 15

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 15,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utilice el método addToSet() para agregar un valor a una matriz si el valor aún no está presente en una operación de actualización.

El siguiente ejemplo añade una instancia de Vendor que tiene un valor de name de "C" al arreglo vendor:

val filter = Filters.eq("_id", 1)
val update = Updates.addToSet(PaintOrder::vendor.name, Vendor("C"))
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" },
{ "name": "C" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utiliza el método popFirst() para remover el primer elemento de un arreglo y el método popLast() para remover el último elemento de un arreglo en una operación de actualización.

El siguiente ejemplo remueve la primera entrada del arreglo vendor:

val filter = Filters.eq("_id", 1)
val update = Updates.popFirst(PaintOrder::vendor.name)
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "D" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utilice el método pullAll() para eliminar todas las instancias de valores especificados de una matriz existente en una operación de actualización.

El siguiente ejemplo elimina Vendor instancias que tienen name valores de "A" y "M" de la matriz vendor:

val filter = Filters.eq("_id", 1)
val update = Updates.pullAll(PaintOrder::vendor.name, listOf(Vendor("A"), Vendor("M")))
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "D" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Usa el método pull() para remover todas las instancias de un valor especificado de un arreglo existente en una operación de actualización.

El siguiente ejemplo elimina Vendor instancias que tienen un valor name de "D" del arreglo vendor:

val filter = Filters.eq("_id", 1)
val update = Updates.pull(PaintOrder::vendor.name, Vendor("D"))
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "M" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Utilice el método push() para agregar un valor a un arreglo en una operación de actualización.

El siguiente ejemplo añade una instancia de Vendor que tiene un valor de name de "Q" al arreglo vendor:

val filter = Filters.eq("_id", 1)
val update = Updates.push(PaintOrder::vendor.name, Vendor("Q"))
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "red",
"qty": 5,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" },
{ "name": "Q" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Una aplicación puede actualizar múltiples campos de un solo documento combinando dos o más de los operadores de actualización descritos en las secciones anteriores.

El siguiente ejemplo aumenta el valor del campo qty en 6, asigna el valor del campo color a "purple" y añade una instancia Vendor que tiene un valor name de "R" al campo vendor:

val filter = Filters.eq("_id", 1)
val update = Updates.combine(
Updates.set(PaintOrder::color.name, "purple"),
Updates.inc(PaintOrder::qty.name, 6),
Updates.push(PaintOrder::vendor.name, Vendor("R"))
)
collection.updateOne(filter, update)

El ejemplo precedente actualiza el documento original al siguiente estado:

{
"_id": 1,
"color": "purple",
"qty": 11,
"vendor": [
{ "name": "A" },
{ "name": "D" },
{ "name": "M" },
{ "name": "R" }
],
"lastModified": { "$date": "2000-01-01T07:00:00.000Z" }
}

Volver

Sort

En esta página