Visão geral
Neste guia, você pode aprender como usar o PyMongo para atualizar documentos em uma coleção MongoDB usando os métodos update_one() ou update_many() .
Dados de amostra
Os exemplos neste guia usam a collection sample_restaurants.restaurants dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte o tutorial Introdução ao PyMongo .
Atualizar operações
Você pode executar operações de atualização no MongoDB com os seguintes métodos:
update_one(), que atualiza o primeiro documento que corresponde aos critérios de pesquisaupdate_many(), que atualiza todos os documentos que correspondem aos critérios de pesquisa
Cada método de atualização exige os seguintes parâmetros:
Um documento de filtro de query , que determina quais documentos atualizar. Para obter mais informações sobre filtros de query, consulte a seção Documentos de filtro de query no manual do MongoDB Server .
Um documento de atualização , que especifica o operador de atualização (o tipo de atualização a ser executada) e os campos e valores que devem ser alterados. Para obter uma lista de operadores de atualização e seu uso, consulte a página do guia Operadores de atualização de campo no manual do MongoDB Server .
Atualizar um documento
O exemplo a seguir usa o método update_one() para atualizar o valor name de um documento chamado "Bagels N Buns" na coleção restaurants. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
restaurants = database["restaurants"] query_filter = {'name' : 'Bagels N Buns'} update_operation = { '$set' : { 'name' : '2 Bagels 2 Buns' } } result = restaurants.update_one(query_filter, update_operation)
restaurants = database["restaurants"] query_filter = {'name' : 'Bagels N Buns'} update_operation = { '$set' : { 'name' : '2 Bagels 2 Buns' } } result = await restaurants.update_one(query_filter, update_operation)
Atualizar muitos documentos
O exemplo seguinte utiliza o método update_many() para atualizar todos os documentos com um valor cuisine de "Pizza". Após a atualização, os documentos têm um valor cuisine de "Pasta". Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
restaurants = database["restaurants"] query_filter = {'cuisine' : 'Pizza'} update_operation = { '$set' : { 'cuisine' : 'Pasta' } } result = restaurants.update_many(query_filter, update_operation)
restaurants = database["restaurants"] query_filter = {'cuisine' : 'Pizza'} update_operation = { '$set' : { 'cuisine' : 'Pasta' } } result = await restaurants.update_many(query_filter, update_operation)
Personalizar a operação de atualização
Os métodos update_one() e update_many() aceitam opcionalmente parâmetros adicionais, que representam opções que você pode usar para configurar a operação de atualização. Se você não especificar nenhuma opção adicional, o driver não personalizará a operação de atualização.
Propriedade | Descrição |
|---|---|
| Especifica se a operação de atualização executará uma operação de upsert se nenhum documento corresponder ao filtro de consulta. Para obter mais informações, consulte a declaração upsert no manual do MongoDB Server . O |
| Especifica se a operação de atualização ignora a validação do documento . Isso permite atualizar documentos que não atendam aos requisitos de validação de esquema , se houver. Para obter mais informações sobre validação de esquema, consulte Validação de esquema no manual do MongoDB Server . |
| Especifica o tipo de agrupamento de linguagem a ser usado ao classificar os resultados. Consulte Agrupamentos para obter mais informações. |
| Uma lista de filtros que especifica a quais elementos de array uma atualização se aplica. |
| Obtém ou define o índice para procurar documentos. Para obter mais informações, consulte a declaração de dica no manual do MongoDB Server . |
| Uma instância de |
| Um mapa de nomes e valores de parâmetros. Os valores devem ser expressões constantes ou fechadas que não façam referência aos campos do documento. Para obter mais informações, consulte a declaração let no manual do MongoDB Server . |
| Um comentário a ser anexado à operação. Para obter mais informações, consulte o guia de campos de comando de inserção no manual do MongoDB Server para obter mais informações. |
O código a seguir usa o método update_many() para localizar todos os documentos em que o campo borough tem o valor "Manhattan". Em seguida, ele atualiza o valor de borough nesses documentos para "Manhattan (north)". Como a opção upsert está definida como True, o PyMongo insere um novo documento se o filtro de query não corresponder a nenhum documento existente. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
restaurants = database["restaurants"] query_filter = {'borough' : 'Manhattan'} update_operation = { '$set' : { 'borough' : 'Manhattan (north)' } } result = restaurants.update_many(query_filter, update_operation, upsert = True)
restaurants = database["restaurants"] query_filter = {'borough' : 'Manhattan'} update_operation = { '$set' : { 'borough' : 'Manhattan (north)' } } result = await restaurants.update_many(query_filter, update_operation, upsert = True)
Agrupamentos
Ao executar uma operação de atualização, você pode especificar um agrupamento para o driver usar.
Um agrupamento é um conjunto de regras específicas do idioma para comparação de cadeias de caracteres, como para letras maiúsculas e minúsculas e acentos.
Para especificar um agrupamento, crie uma instância da classe Collation ou um dicionário Python. Para obter uma lista de opções a serem passadas para o construtor Collation ou incluídas como chaves no dicionário, consulte Agrupamento no manual do MongoDB Server.
Dica
Importar agrupamento
Para criar uma instância da classe Collation, você deve importá-la do pymongo.collation.
O exemplo a seguir executa a mesma operação de atualização do exemplo anterior, mas com um agrupamento padrão de fr_CA. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
from pymongo.collation import Collation restaurants = database["restaurants"] query_filter = {'cuisine' : 'Pizza'} update_operation = { '$set' : { 'cuisine' : 'Pasta' } } result = restaurants.update_many(query_filter, update_operation, collation=Collation(locale='fr_CA'))
from pymongo.collation import Collation restaurants = database["restaurants"] query_filter = {'cuisine' : 'Pizza'} update_operation = { '$set' : { 'cuisine' : 'Pasta' } } result = await restaurants.update_many(query_filter, update_operation, collation=Collation(locale='fr_CA'))
Observação
O agrupamento de operações substitui o padrão
Quando você especifica um agrupamento como parte de uma operação, ele substitui o agrupamento padrão para a coleção.
Valor de retorno
Os métodos update_one() e update_many() retornam um objeto UpdateResult. O tipo UpdateResult contém as seguintes propriedades:
Propriedade | Descrição |
|---|---|
| O número de documentos que corresponderam ao filtro de queries, independentemente de quantos foram atualizados. |
| O número de documentos modificados pela operação de atualização. Se um documento atualizado for idêntico ao original, ele não será incluído nesta contagem. |
| O documento do resultado bruto retornado pelo servidor. |
| A ID do documento que foi atualizado no banco de dados, se o driver tiver realizado um upsert. Caso contrário, |
Informações adicionais
Para saber mais sobre como criar filtros de queries, consulte o guia Especifique uma consulta.
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: