Substituir documentos
Nesta página
Visão geral
Neste guia, você pode aprender como usar o driver Java Reactive Streams para substituir um documento em uma coleção MongoDB executando uma operação de substituição.
Uma operação de substituição substitui um documento em uma coleção MongoDB por novos campos e valores que você especifica. Você pode executar uma operação de substituição usando o método replaceOne()
.
Dados de amostra
Os exemplos neste guia usam a coleção sample_restaurants.restaurants
dos conjuntos de dados de amostra do Atlas.
Para aprender como criar um agrupamento MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o tutorial deIntrodução ao .
Importante
Biblioteca do Reator do Projeto
Este guia usa a biblioteca Project Reactor para consumir Publisher
instâncias do retornadas pelos métodos de driver Java Reactive Streams. Para saber mais sobre a biblioteca do Projeto Reactor e como usá-la, consulte Introdução na documentação do Reactor. Para saber mais sobre como usamos os métodos da biblioteca do Project Reactor neste guia, consulte o guia Gravar dados no MongoDB .
Operação de substituição
Você pode executar uma operação de substituição utilizando o método replaceOne()
em uma instância do MongoCollection
. Esse método remove todos os campos, exceto o campo _id
do primeiro documento que corresponde aos critérios de pesquisa, depois adiciona os campos e valores especificados ao documento vazio.
Parâmetros necessários
O método replaceOne()
exige os seguintes parâmetros:
documento de filtro de query , que determina quais documentos substituir.
Para obter mais informações sobre filtros de query, consulte o guia Especificar uma query .
Substituir documento, que especifica os campos e valores a serem inseridos no novo documento.
Exemplo de substituição
Para substituir um único documento em uma coleção MongoDB , chame o método replaceOne()
e passe o documento de filtro de query e o documento de substituição como parâmetros. Em seguida, passe o resultado replaceOne()
para o método Mono.from()
estático de Mono
. Mono
é uma classe da biblioteca do Project Reactor. No Java Reactive Streams, os métodos do driver retornam instâncias Publisher
frios, o que significa que a operação correspondente não acontece a menos que você assine o Publisher
retornado. Este guia usa a biblioteca do Project Reactor para consumi-los. Para saber mais sobre Mono
, consulte Mono na documentação do Projeto Reactor.
O exemplo a seguir usa o método replaceOne()
para substituir os campos e valores de um documento por um valor de campo name
de "Pizza Town"
. O método replaceOne()
substitui o documento original por um documento que tenha um valor de campo name
de "Mongo's Pizza"
e um valor de campo cuisine
de "Pizza"
.
Publisher<UpdateResult> replacePublisher = restaurants.replaceOne( eq("name", "Pizza Town"), new Document().append("name", "Mongo's Pizza") .append("cuisine", "Pizza")); Mono.from(replacePublisher).block();
Modificar comportamento de substituição
Opcionalmente, você pode modificar o comportamento do método replaceOne()
chamando um método de opções. A classe ReplaceOptions
fornece métodos que modificam o comportamento do método replaceOne()
. Para usar a classe ReplaceOptions
, construa uma nova instância da classe e, em seguida, chame um ou mais de seus métodos para modificar a operação de substituição. Você pode encadear essas chamadas de método. Para modificar o comportamento da operação de substituição, passe a instância de classe e as chamadas de método encadeadas como o último argumento para o método replaceOne()
.
Você pode utilizar os seguintes métodos na classe ReplaceOptions
para modificar o método replaceOne()
.
Método | Descrição |
---|---|
bypassDocumentValidation(Boolean bypass) | Specifies whether the replace operation bypasses document validation. This lets you
update documents that don't meet the schema validation requirements, if any
exist. For more information about schema validation, see Schema
Validation in the MongoDB
Server manual. |
collation(Collation collation) | Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. |
comment(BsonValue comment) | Attaches a BsonValue comment to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
comment(String comment) | Attaches a String comment to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
hint(Bson hint) | Sets the index for the operation as a Bson value.
For more information, see the hint statement
in the MongoDB Server manual. |
hintString(String hint) | Sets the index for the operation as a String value.
For more information, see the hint statement
in the MongoDB Server manual. |
let(Bson variables) | Specifies a map of parameter names and values. Values must be constant or closed
expressions that don't reference document fields. For more information,
see the let statement in the
MongoDB Server manual. |
upsert(Boolean upsert) | Specifies whether the replace operation performs an upsert operation if no
documents match the query filter. For more information, see the upsert
statement
in the MongoDB Server manual. |
Exemplo de modificação de substituição
O seguinte código utiliza o método replaceOne()
para substituir um documento na coleção restaurants
. Ele também define a opção upsert(true)
para que o driver insira um novo documento se o filtro de query não corresponder a nenhum documento existente.
Publisher<UpdateResult> replacePublisher = restaurants.replaceOne( eq("name", "Food Town"), new Document().append("name", "Food World") .append("cuisine", "Mixed"), new ReplaceOptions().upsert(true)); Mono.from(replacePublisher).block();
Valor de retorno
O método replaceOne()
retorna um objeto UpdateResult
. Utilize os seguintes métodos do tipo UpdateResult
para acessar as informações correspondentes:
Propriedade | Descrição |
---|---|
getMatchedCount() | The number of documents that matched the query filter, regardless of
how many were replaced. |
getModifiedCount() | The number of documents modified by the replace operation. If a replaced
document is identical to the original, it is not included in this
count. |
getUpsertedId() | The ID of the document that was inserted into the database, if the driver
performed an upsert. If no document was inserted, this value is null . |
wasAcknowledged() | An acknowledgement of the replacement. |
Informações adicionais
Para obter exemplos de código executáveis de substituição de documentos pelo driver Java Reactive Streams, consulte o guia Gravar dados no MongoDB .
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: