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

Atualizar Matrizes em um Documento

Nesta página

  • Visão geral
  • Documento de amostra
  • Especificando uma atualização
  • Especificando Elementos de Array
  • O Primeiro Elemento de Array Correspondente
  • Correspondendo todos os elementos da array
  • Combinando vários elementos da matriz

Neste guia, você pode aprender como atualizar arrays em um documento com o driver MongoDB Kotlin.

Para atualizar uma atualizar, você deve fazer o seguinte:

  • Especifique a atualização que você deseja executar

  • Especifique em quais elementos da array aplicar sua atualização

  • Execute uma operação de atualização usando estas especificações

As seções a seguir apresentam exemplos que atualizam este documento de amostra:

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

Esses dados são modelados com a seguinte classe de dados Kotlin:

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

Os exemplos nesta página utilizam o método findOneAndUpdate() da classe MongoCollection para recuperar e atualizar o documento. Cada exemplo usa uma instância da classe FindOneAndUpdateOptions para que o MongoDB recupere o documento após a atualização ocorrer. Para obter mais informações sobre o método findOneAndUpdate() , consulte nossoguia de operações compostas do .

Para especificar uma atualização, use o construtor Updates. O construtor Updates fornece métodos utilitários estáticos para construir especificações de atualizações.

Para obter mais informações sobre como usar o construtor Updates com arrays, consulte nosso guia sobre o construtor de atualizações.

O exemplo a seguir executa estas ações:

  • Query para o documento de amostra

  • Anexa "17" à array qty no documento que corresponde ao 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)

Você pode especificar quais elementos da array atualizar usando um operador posicional. Os operadores posicionais podem especificar o primeiro, todos ou determinados elementos da array a serem atualizados.

Para especificar elementos em uma array com operadores posicionais, use a notação de ponto. A notação de ponto é uma sintaxe de acesso à propriedade para navegar em objetos BSON.

Para mais informações, consulte a entrada manual do servidor sobre notação de ponto.

Para atualizar o primeiro elemento de array que corresponde ao filtro de query, use o operador posicional $. O campo de array deve aparecer como parte do filtro de query para usar o operador posicional $.

O exemplo a seguir executa estas ações:

  • Query de um documento com um campo qty contendo o valor "18"

  • Diminua o primeiro valor da array no documento que corresponde ao filtro de query por "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 obter mais informações sobre os métodos e operadores mencionados nesta seção, consulte os seguintes recursos:

Para atualizar todos os elementos em uma atualizar, use o operador posicional $[] all.

O exemplo a seguir executa estas ações:

  • Query para o documento de amostra

  • Multiplique os elementos da array que correspondem ao 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 obter mais informações sobre os métodos e operadores mencionados nesta seção, consulte os seguintes recursos:

Para atualizar elementos de array que correspondem a um filtro, use o operador posicional $[<identifier>] filtrado. Você deve incluir um filtro de array em sua operação de atualização para especificar quais elementos de array devem ser atualizados.

O <identifier> é o nome que você dá ao filtro de array. Esse valor deve começar com uma letra minúscula e conter apenas caracteres alfanuméricos.

O exemplo a seguir executa estas ações:

  • Query para o documento de amostra

  • Defina um filtro de array para pesquisar valores inferiores a "15"

  • Incremente os elementos de array que correspondem ao filtro de query em "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 obter mais informações sobre os métodos e operadores mencionados nesta seção, consulte os seguintes recursos:

Voltar

Modificar documentos