Atualizar Matrizes em um Documento
Nesta página
Visão geral
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
Documento de amostra
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( 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 .
Especificando uma atualização
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)
Especificando Elementos de Array
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.
O Primeiro Elemento de Array Correspondente
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 $
.
Exemplo
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:
Operador posicional $ Entrada manual do servidor
inc() Documentação da API
Correspondendo todos os elementos da array
Para atualizar todos os elementos em uma atualizar, use o operador posicional $[]
all.
Exemplo
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:
Operador posicional $[] all Entrada manual do servidor
mul() Documentação da API
Combinando vários elementos da matriz
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.
Exemplo
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:
Operador posicional $[<identifier>] filtrado Entrada manual do servidor
inc() Documentação da API