Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Ruby Driver
/

Atualize documentos

Neste guia, você aprenderá a usar o driver Ruby para atualizar documentos em uma collection do MongoDB usando os métodos update_one e update_many.

Os exemplos neste guia utilizam a coleção do restaurants no banco de dados do sample_restaurants a partir dosconjuntos de dados de amostra do Atlas. Para acessar essa coleção a partir do seu aplicação Ruby, crie um objeto Mongo::Client que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis database e collection:

database = client.use('sample_restaurants')
collection = database[:restaurants]

Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .

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

  • update_one: Atualiza o primeiro documento que corresponde aos critérios de pesquisa

  • update_many: Atualiza todos os documentos que correspondem aos critérios de pesquisa

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

  • Filtro de query , que corresponde aos documentos que você deseja 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 e os campos e valores a serem atualizados. O operador de atualização especifica o tipo de atualização a ser executada. Para visualizar uma lista de operadores de atualização e saber mais sobre seus usos, consulte a página do guia Operadores de atualização de campo no manual do MongoDB Server .

O exemplo a seguir usa o método update_one para localizar o primeiro documento em que o valor do campo name é "Happy Garden". Em seguida, ele usa o operador $set para atualizar o valor do campo name para "Mountain House".

filter = { name: 'Happy Garden' }
update = { '$set' => { name: 'Mountain House' } }
single_result = collection.update_one(filter, update)
puts "#{single_result.modified_count} document(s) updated."
1 document(s) updated

O exemplo seguinte utiliza o método update_many para atualizar todos os documentos onde o valor do campo name é "Starbucks". O documento de atualização usa o operador $rename para alterar o nome do campo address para location.

filter = { name: 'Starbucks' }
update = { '$rename' => { address: 'location' } }
many_result = collection.update_many(filter, update)
puts "#{many_result.modified_count} document(s) updated."
11 document(s) updated

Os métodos update_one e update_many aceitam opções para configurar a operação de atualização. Você pode passar essas opções individualmente como parâmetros ou pode criar um objeto Hash que contenha as opções e passar o objeto como um parâmetro. Se você não especificar nenhuma opção, o driver executará a operação de atualização com as configurações padrão.

A tabela a seguir descreve as opções que você pode usar para configurar a operação de atualização:

Opção
Descrição

upsert

Whether the update operation performs an upsert operation if no documents match the query filter. For more information, see the upsert statement in the MongoDB Server manual.
Default: false

bypass_document_validation

Whether the update 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.
Default: false

collation

Language collation to use when sorting results. For more information, see Collation in the MongoDB Server manual.

array_filters

List of filters that you specify to select which array elements the update applies to.

hint

Index to use when matching documents. For more information, see the hint statement in the MongoDB Server manual.

let

Map of parameter names and values to set top-level variables for the operation. 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.

O exemplo utiliza o operador $equal para corresponder a documentos onde o valor do campo name é "Sunrise Pizzeria". Em seguida, ele usa o operador $set para definir o valor do campo borough no primeiro documento correspondente como "Queens" e o valor do campo cuisine como "Italian".

Como a opção upsert está definida como true, se o filtro de query não corresponder a nenhum documento existente, o driver insere um novo documento que contém os campos e valores no filtro e atualiza os documentos.

filter = { 'name' => 'Sunrise Pizzeria' }
update = { '$set' => { borough: 'Queens', cuisine: 'Italian' } }
upsert_result = collection.update_one(filter, update, upsert: true)
puts "#{upsert_result.modified_count} document(s) updated."
1 document(s) updated

Os métodos update_one e update_many retornam um objeto Result. Você pode acessar os seguintes métodos a partir de uma instância Result :

Método
Descrição

matched_count

Number of documents that matched the query filter, regardless of how many updates were performed.

modified_count

Number of documents modified by the update operation. If an updated document is identical to the original, it is not included in this count.

acknowledged?

Returns true if the server acknowledged the result.

upserted_count

Returns the number of documents that were upserted in the database, if the driver performed an upsert.

upserted_ids

Returns the _id value of the document that was upserted in the database, if the driver performed an upsert.

Dica

Verifique o valor do método acknowledged? antes de tentar chamar qualquer outro método Result. Se o método acknowledged? retornar false, o driver lançará uma exceção InvalidOperation se você tentar chamar qualquer outro método no objeto Result. O driver não pode determinar esses valores se o servidor não reconhecer a operação de gravação.

Para exibir exemplos de código executáveis que demonstram como atualizar documentos usando o driver Ruby, consulte Gravar dados no MongoDB.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Substituir documentos

Nesta página