Atualizar Matrizes em um Documento
Nesta página
Visão geral
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
Documento de amostra
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 .
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
Bson filter = Filters.eq("_id", 1); Bson update = Updates.push("qty", 17); // Defines options that configure the operation to return a document in its post-operation state FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER); // Updates the first document that matches the filter and prints the updated document as JSON 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] }
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"
Bson filter = Filters.eq("qty", 18); Bson update = Updates.inc("qty.$", -3); // Defines options that configure the operation to return a document in its post-operation state FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER); // Updates the first document that matches the filter and prints the updated document as JSON 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:
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"
Bson filter = Filters.eq("_id", 1); Bson update = Updates.mul("qty.$[]", 2); // Defines options that configure the operation to return a document in its post-operation state FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER); // Updates the first document that matches the filter and prints the updated document as JSON 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:
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"
Bson filter = Filters.eq("_id", 1); Bson smallerFilter = Filters.lt("smaller", 15); // Defines options that configure the document's return state and apply the array value filter FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) .arrayFilters(Arrays.asList(smallerFilter)); // Creates an update document to increase the matched array values by "5" Bson update = Updates.inc("qty.$[smaller]", 5); // Updates the first document that matches the filter and prints the updated document as JSON 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:
Operador posicional $[<identifier>] filtrado Entrada manual do servidor
inc() Documentação da API