Menu Docs
Página inicial do Docs
/ / /
Java síncrono
/ / /

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

Este guia mostra como atualizar arrays em um documento com o driver do Java MongoDB.

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] }

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

Bson filter = Filters.eq("_id", 1);
Bson update = Updates.push("qty", 17);
FindOneAndUpdateOptions options = new FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER);
Document result = collection.findOneAndUpdate(filter, update, options);
System.out.println(result.toJson());

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

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

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"

Bson filter = Filters.eq("qty", 18);
Bson update = Updates.inc("qty.$", -3);
FindOneAndUpdateOptions options = new FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER);
Document result = collection.findOneAndUpdate(filter, update, options);
System.out.println(result.toJson());

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

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

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"

Bson filter = Filters.eq("_id", 1);
Bson update = Updates.mul("qty.$[]", 2);
FindOneAndUpdateOptions options = new FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER);
Document result = collection.findOneAndUpdate(filter, update, options);
System.out.println(result.toJson());

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

{ "_id": 1, "color": "green", "qty": [16, 24, 36] }

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"

Bson filter = Filters.eq("_id", 1);
Bson smallerFilter = Filters.lt("smaller", 15);
FindOneAndUpdateOptions options = new FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER)
.arrayFilters(Arrays.asList(smallerFilter));
Bson update = Updates.inc("qty.$[smaller]", 5);
Document result = collection.findOneAndUpdate(filter, update, options);
System.out.println(result.toJson());

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

{ "_id": 1, "color": "green", "qty": [13, 17, 18] }

Para obter mais informações sobre os métodos e operadores mencionados nesta seção, consulte os seguintes recursos:

Voltar

Modificar documentos