Menu Docs
Página inicial do Docs
/ / /
Kotlin Coroutine
/ /

Atualizações de construtores

Nesta página

  • Visão geral
  • Atualizações de campo
  • definir
  • Desconfigurar
  • Definir na inserção
  • Incremento
  • Multiplicar
  • renomear
  • Min
  • Máx
  • Data atual
  • Carimbo de data/hora atual
  • Bit
  • Array Updates
  • Adicionar ao conjunto
  • Pop
  • Puxe tudo
  • Puxe
  • Empurrar
  • Combinando vários operadores de atualização

Neste guia, você pode aprender como especificar atualizações usando construtores no MongoDB Kotlin Driver.

O construtor do Updates fornece métodos de ajuda para os seguintes tipos de atualizações:

  • Atualizações de campo

  • Array Updates

  • Combinando vários operadores de atualização

Alguns métodos que esperam atualizações são:

  • updateOne()

  • updateMany()

  • bulkWrite()

A classe Updates fornece métodos de fábrica estáticos para todos os operadores de atualização do MongoDB. Cada método retorna uma instância do tipo BSON, que você pode passar para qualquer método que espera um argumento de atualização.

Dica

Para maior brevidade, você pode optar por importar os métodos da pasta Atualizações classe:

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

Os exemplos deste guia usam o seguinte documento:

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

Este exemplo é modelado pela seguinte classe de dados, a menos que indicado de outra forma:

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,
)

Use o método set() para atribuir o valor de um campo em uma operação de atualização.

O seguinte exemplo define o valor do campo qty para 11:

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o método unset() para excluir o valor de um campo em uma operação de atualização.

O exemplo seguinte exclui o campo qty:

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o método setOnInsert() para atribuir o valor de um campo em uma operação de atualização em uma inserção de um documento.

O exemplo a seguir define o valor do campo color como "pink" se a operação resultou na inserção de um documento:

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Observação

Se o documento não for inserido, nenhuma alteração ocorrerá.

Utilize o método inc() para incrementar o valor de um campo numérico em uma operação de atualização.

O exemplo seguinte incrementa o valor do campo qty , que era 5, por 3:

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Utilize o método mul() para multiplicar o valor de um campo numérico em uma operação de atualização.

O exemplo seguinte multiplica o valor do 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)

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o método rename() para renomear o valor de um campo em uma operação de atualização.

O exemplo a seguir renomeia o campo qty para quantity:

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o min() método para definir o valor do campo para o valor fornecido se o valor fornecido for menor que o valor atual do campo.

O exemplo a seguir atualiza o campo qty para 2 porque 2 é menor que o valor atual do campo qty (5):

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o método max() para atualizar o valor de um campo com o número maior dos dois especificados em uma operação de atualização.

O exemplo a seguir atualiza o campo qty para 8 porque 8 é maior que o valor atual do campo qty (5):

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o método currentDate() para atribuir o valor de um campo em uma operação de atualização para a data atual como uma data BSON.

O exemplo a seguir define o valor do campo lastModified para a data atual como uma data BSON:

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

Como escrevemos esta página em 16 de junho de 2023, o exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o método currentTimestamp() para atribuir o valor de um campo em uma operação de atualização para a data atual como timestamp.

O exemplo a seguir define o valor do campo lastModified para a data atual como um carimbo de data/hora 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)

Como escrevemos esta página em 16 de junho de 2023, o exemplo anterior atualiza o documento original para o seguinte estado:

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

Use os métodos bitwiseOr(), bitwiseAnd() e bitwiseXor() para executar uma atualização bit a bit do valor inteiro de um campo em uma operação de atualização.

O exemplo a seguir executa um OR bitwise entre o número 10 e o valor inteiro do campo qty (5):

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

A operação bitwise resulta em 15:

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Utilize o método addToSet() para anexar um valor a uma array se o valor ainda não estiver presente em uma operação de atualização.

O exemplo a seguir adiciona uma instância Vendor com um valor name de "C" à array vendor :

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o método popFirst() para remover o primeiro elemento de uma array e o método popLast() para remover o último elemento de uma array em uma operação de atualização.

O exemplo a seguir remove a primeira entrada da array vendor :

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o método pullAll() para remover todas as instâncias de valores especificados de uma array existente em uma operação de atualização.

O exemplo a seguir remove instâncias Vendor que têm valores name de "A" e "M" da array vendor :

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Use o pull() para remover todas as instâncias de um valor especificado de uma array existente em uma operação de atualização.

O exemplo a seguir remove as instâncias Vendor que têm um valor name de "D" da array vendor :

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Utilize o método push() para anexar um valor a uma array em uma operação de atualização.

O exemplo a seguir adiciona uma instância Vendor com um valor name de "Q" à array vendor :

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

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Um aplicativo pode atualizar vários campos de um único documento combinando dois ou mais operadores de atualização descritos nas seções anteriores.

O exemplo a seguir incrementa o valor do campo qty em 6, define o valor do campo color como "purple" e adiciona uma instância Vendor que tem um valor name de "R" para o 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)

O exemplo anterior atualiza o documento original para o seguinte estado:

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

Voltar

Construtores de classificação