Docs Menu
Docs Home
/ /

Update Documents

En esta guía, puede aprender a usar PyMongo para actualizar documentos en una colección MongoDB mediante el uso de update_one() o métodos update_many().

Los ejemplos de esta guía utilizan la colección sample_restaurants.restaurants de Conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte Tutorial paraempezar a usar PyMongo.

Puede realizar operaciones de actualización en MongoDB utilizando los siguientes métodos:

  • update_one(), que actualiza el primer documento que coincide con los criterios de búsqueda

  • update_many(), que actualiza todos los documentos que coinciden con los criterios de búsqueda

Cada método de actualización requiere los siguientes parámetros:

  • Un documento de filtro de consulta, que determina qué documentos actualizar. Para más información sobre los filtros de consulta, consulte la sección "Documentos de filtro de consulta" del manual de MongoDB Server.

  • Un documento de actualización que especifica el operador de actualización (el tipo de actualización a realizar) y los campos y valores que deben cambiarse. Para obtener una lista de operadores de actualización y su uso, consulte la página de la guía "Operadores de actualización de campos" en el manual de MongoDB Server.

El siguiente ejemplo utiliza el método update_one() para actualizar el valor name de un documento llamado "Bagels N Buns" en la colección restaurants. Seleccione el Synchronous o pestaña Asynchronous para ver el código correspondiente:

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)

El siguiente ejemplo utiliza el método update_many() para actualizar todos los documentos con un valor cuisine de "Pizza". Tras la actualización, los documentos tienen un valor cuisine de "Pasta". Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:

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)

Los métodos update_one() y update_many() aceptan opcionalmente parámetros adicionales, que representan opciones que se pueden usar para configurar la operación de actualización. Si no se especifican opciones adicionales, el controlador no personaliza la operación de actualización.

Propiedad
Descripción

upsert

Specifies 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.
Defaults to False

bypass_document_validation

Specifies 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.
Defaults to False.

collation

Specifies the kind of language collation to use when sorting results. See Collation for more information.

array_filters

A list of filters that specifies which array elements an update applies to.

hint

Gets or sets the index to scan for documents. For more information, see the hint statement in the MongoDB Server manual.

session

An instance of ClientSession.

let

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.

comment

A comment to attach to the operation. For more information, see the insert command fields guide in the MongoDB Server manual for more information.

El siguiente código usa el método update_many() para buscar todos los documentos donde el campo borough tiene el valor "Manhattan". Luego, actualiza el valor borough en estos documentos a "Manhattan (north)". Dado que la opción upsert está establecida en True, PyMongo inserta un nuevo documento si el filtro de consulta no coincide con ningún documento existente. Seleccione la pestaña Synchronous u Asynchronous para ver el código correspondiente:

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)

Cuando realiza una operación de actualización, puede especificar una intercalación para que la utilice el controlador.

Una intercalación es un conjunto de reglas específicas del lenguaje para la comparación de strings, como el uso de mayúsculas y minúsculas y las marcas de acento.

Para especificar una intercalación, crear una instancia de la clase Collation o un diccionario de Python. Para una lista de opciones que pueda pasar al constructor Collation o incluir como claves en el diccionario, consultar Intercalación en el manual de MongoDB Server.

Tip

Intercalación de importación

Para crear una instancia de la clase Collation, se debe importar desde pymongo.collation.

El siguiente ejemplo realiza la misma operación de actualización que el ejemplo anterior, pero con una intercalación predeterminada de fr_CA. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:

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'))

Nota

La intercalación de operaciones anula la por defecto

Cuando se especifica una intercalación como parte de una operación, esta anula la intercalación por defecto de la colección.

Los métodos update_one() y update_many() devuelven cada uno un objeto UpdateResult. El tipo UpdateResult contiene las siguientes propiedades:

Propiedad
Descripción

matched_count

The number of documents that matched the query filter, regardless of how many were updated.

modified_count

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

raw_result

The raw result document returned by the server.

upserted_id

The ID of the document that was upserted in the database, if the driver performed an upsert. Otherwise None.

Para obtener más información sobre cómo crear filtros de consulta, consulte la guía Especificar una consulta.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Acceder a datos desde un cursor

En esta página