Docs Menu
Docs Home
/ /
/ / /

Actualizaciones de constructores

En esta guía, puede aprender a especificar actualizaciones mediante constructores en el controlador Kotlin de MongoDB.

El Updates El constructor proporciona métodos auxiliares para los siguientes tipos de actualizaciones:

  • Actualizaciones de campo

  • Array Updates

  • Combinación de 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, puede 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 está modelado por 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 usar los métodos de las clases de constructor directamente con las propiedades de las clases de datos añadiendo la dependencia opcional de extensiones del controlador Kotlin a tu aplicación. Para obtener más información y ver ejemplos, consulta la guía "Usar constructores con clases de datos".

Utilice 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 anterior 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" }
}

Utilice el método unset() para eliminar 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 anterior 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" }
}

Utilice el método setOnInsert() para asignar el valor de un campo en una operación de actualización en una 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 anterior actualiza el documento original al siguiente estado:

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

Nota

Si no se inserta el documento 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 anterior 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 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 anterior 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" }
}

Utilice el método rename() para cambiar el nombre del 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 anterior 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 anterior 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 anterior 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)

Dado 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"
}

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

El siguiente ejemplo establece el valor del campo lastModified en 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)

Dado 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 un OR bit a bit 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 anterior 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 agrega una instancia Vendor que tiene un valor name de "C" a la matriz vendor:

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

El ejemplo anterior 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" }
}

Utilice el método popFirst() para eliminar el primer elemento de una matriz y el método popLast() para eliminar el último elemento de una matriz 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 anterior 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 anterior 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" de la matriz vendor:

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

El ejemplo anterior 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 una matriz en una operación de actualización.

El siguiente ejemplo agrega una instancia Vendor que tiene un valor name de "Q" a la matriz vendor:

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

El ejemplo anterior 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 incrementa el valor del campo qty en 6, establece el valor del campo color en "purple" y agrega 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 anterior 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