Menu Docs
Página inicial do Docs
/ /

Atualize documentos

Neste guia, você pode aprender como atualizar documentos em uma coleção MongoDB utilizando os métodos updateOne() e updateMany().

Os exemplos deste guia executam operações na collection paint_inventory, que armazena documentos que representam cores de tinta no inventário de uma loja. Esta collection contém os seguintes documentos de exemplo:

{ "_id": 1, "color": "red", "qty": 5, "prices": [15.99, 19.99] }
{ "_id": 2, "color": "purple", "qty": 8, "prices": [18.99, 22.99] }
{ "_id": 3, "color": "yellow", "qty": 0, "prices": [14.99, 17.99] }
{ "_id": 4, "color": "green", "qty": 6, "prices": [19.99, 24.99] }
{ "_id": 5, "color": "blue", "qty": 3, "prices": [17.99, 21.99] }

A seguinte classe de dados Kotlin modela os documentos da coleção:

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

Você pode atualizar documentos no MongoDB com os seguintes métodos:

  • updateOne(), que atualiza o primeiro documento que corresponde aos critérios de pesquisa

  • updateMany(), que atualiza todos os documentos que correspondem aos critérios de pesquisa

Cada método de atualização exige os seguintes parâmetros:

  • Filtro de consulta, que corresponde a quais documentos atualizar. Para saber mais sobre filtros de query, consulte o guia Especificar uma query .

  • documento de atualização , que especifica o operador de atualização ou o tipo de atualização a ser executada e os campos e valores a serem atualizados. Para obter uma lista de operadores de atualização e seus usos, consulte os operadores de atualização decampo do no manual do servidor MongoDB .

Os exemplos neste guia usam o Updates construtor, uma classe de fábrica que fornece métodos de assistente para construir documentos de atualização. Para saber mais sobre o Updates construtor, consulte o guia Atualizações de construtores.

Este exemplo utiliza o método updateOne() para executar a seguinte ação:

  • Corresponde a um documento no qual o valor do campo color é "yellow"

  • Usa o construtor Updates para incrementar o valor de campo qty do documento correspondente em 1

val filter = Filters.eq(PaintOrder::color.name, "yellow")
val update = Updates.inc(PaintOrder::qty.name, 1)
val result = collection.updateOne(filter, update)
println("Matched document count: ${result.matchedCount}")
println("Modified document count: ${result.modifiedCount}")
Matched document count: 1
Modified document count: 1

Observação

Se vários documentos corresponderem ao filtro de query passado para o updateOne() método, a operação atualizará somente o primeiro resultado. Para controlar a qual documento a operação corresponde, você pode especificar uma ordem de classificação. Para saber mais sobre a sort opção, consulte a página Classificar resultados.

O exemplo a seguir usa o método updateMany() para executar as ações a seguir:

  • Corresponde a todos os documentos usando um filtro de query vazio

  • Usa o construtor Updates para aumentar o valor do campo qty em 20 em todos os documentos correspondentes

val filterMany = Filters.empty()
val updateMany = Updates.inc(PaintOrder::qty.name, 20)
val resultMany = collection.updateMany(filterMany, updateMany)
println("Matched document count: ${resultMany.matchedCount}")
println("Modified document count: ${resultMany.modifiedCount}")
Matched document count: 5
Modified document count: 5

Após a operação de atualização, os documentos na coleção paint_inventory têm os seguintes valores:

{ "_id": 1, "color": "red", "qty": 25, "prices": [15.99, 19.99] }
{ "_id": 2, "color": "purple", "qty": 28, "prices": [18.99, 22.99] }
{ "_id": 3, "color": "yellow", "qty": 20, "prices": [14.99, 17.99] }
{ "_id": 4, "color": "green", "qty": 26, "prices": [19.99, 24.99] }
{ "_id": 5, "color": "blue", "qty": 23, "prices": [17.99, 21.99] }

Observação

Se o filtro de query não corresponder a nenhum documento, o updateMany() método não fará alterações nos documentos da coleção. Você pode usar a upsert opção para inserir um novo documento se nenhum corresponder. Para visualizar um exemplo que usa esta opção, consulte Inserir ou atualizar em uma única operação.

Importante

Os updateOne() updateMany() métodos e não podem fazer alterações em um documento que viole restrições de índice único na collection. Para saber mais, consulte Índices únicos no manual do servidor MongoDB .

Para atualizar os valores de array de um documento, use o construtor Updates para especificar a atualização que deseja executar e os elementos de array a serem atualizados. Em seguida, chame o método updateOne() ou updateMany() para executar a operação de atualização.

Você pode especificar quais elementos da array atualizar usando os seguintes operadores posicionais:

  • $: Atualiza o primeiro elemento de array que corresponde ao filtro de query.

  • $[]: Atualiza todos os elementos em uma array.

  • $[<identifier>]: atualiza os elementos de array que correspondem a um filtro.

Os exemplos nesta seção mostram como usar cada operador posicional.

Para atualizar o primeiro elemento de array que corresponde ao filtro de query, use o operador posicional ($) e especifique o campo de array a ser atualizado no filtro de query.

Este exemplo executa as seguintes ações:

  • Corresponde a um documento com uma array prices contendo o valor 15.99

  • Usa o operador posicional $ para aumentar o primeiro valor na array prices do documento correspondente em 2

val filterArrayFirst = Filters.eq(PaintOrder::prices.name, 15.99)
val updateArrayFirst = Updates.inc("${PaintOrder::prices.name}.$", 2)
val resultArrayFirst = collection.updateOne(filterArrayFirst, updateArrayFirst)
println("Modified document count: ${resultArrayFirst.modifiedCount}")
Modified document count: 1

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

Este exemplo executa as seguintes ações:

  • Corresponde a um documento com um valor color de "green"

  • Usa o operador posicional $[] para multiplicar todos os valores na array prices do documento correspondente por 1.1

Voltar

Texto da query

Nesta página