Overview
En esta guía, puedes aprender cómo usar PyMongo para actualizar documentos en una colección de MongoDB utilizando los métodos update_one() o update_many().
Datos de muestra
Los ejemplos en esta guía utilizan la colección sample_restaurants.restaurants de los 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, consultar el tutorial Comenzar con PyMongo.
Operaciones de actualizar
Puedes 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úsquedaupdate_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 query, que determina qué documentos actualizar. Para obtener más información sobre los filtros de query, consulta la sección Documentos de Filtros de Query en el manual del 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 cambiar. Para obtener una lista de los operadores de actualización y su uso, consulta la página de la guía de Operadores de actualización de campos en el manual de MongoDB Server.
Actualizar un documento
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. Selecciona la pestaña Synchronous o 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)
Actualizar muchos documentos
El siguiente ejemplo utiliza el método update_many() para actualizar todos los documentos con un valor cuisine de "Pizza". Después de la actualización, los documentos tienen un valor de cuisine de "Pasta". Selecciona 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)
Personaliza la operación de actualizar
Los métodos update_one() y update_many() aceptan opcionalmente parámetros adicionales, que representan opciones que puedes usar para configurar la operación de actualización. Si no especifica opciones adicionales, el driver no personaliza la operación de actualización.
Propiedad | Descripción |
|---|---|
| Especifica si la operación de actualización realiza una operación de inserción/actualización si ningún documento coincide con el filtro de consulta. Para obtener más información, consulte la instrucción `upsert` en el manual del servidor MongoDB. El |
| Especifica si la operación de actualización omite la validación del documento. Esto permite actualizar documentos que no cumplen con los requisitos de validación del esquema, si los hubiera. Para obtener más información sobre la validación del esquema, consulte Validación de esquema en el manual del servidor MongoDB. |
| Especifica el tipo de intercalación de lenguaje que se debe usar al clasificar los resultados. Consulte intercalación para obtener más información. |
| Una lista de filtros que especifica a qué elementos de un arreglo se les aplica una actualización. |
| Obtiene o define el índice para escanear documentos. Para obtener más información, consulta la instrucción de sugerencia en el manual del MongoDB Server. |
| Una instancia de |
| Un mapa de nombres y valores de parámetros. Los valores deben ser constantes o expresiones cerradas que no referencien los campos del documento. Para más información, vea la instrucción let en el manual de MongoDB Server. |
| Un comentario para adjuntar a la operación. Para más información, consulta la guía insertar campos de comandos en el manual de MongoDB Server para obtener más información. |
El siguiente código utiliza el método update_many() para encontrar todos los documentos donde el campo borough tenga el valor "Manhattan". Luego actualiza el valor borough en estos documentos a "Manhattan (north)". Debido a que la opción upsert está configurada en True, PyMongo inserta un nuevo documento si el filtro de query no coincide con ningún documento existente. Selecciona la pestaña Synchronous o 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)
Intercalación
Cuando realices una operación de actualización, puedes especificar una intercalación que el controlador debe utilizar.
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. Selecciona 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.
Valor de retorno
Los métodos update_one() y update_many() devuelven cada uno un objeto UpdateResult. El UpdateResult tipo contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| El número de documentos que coincidieron con el filtro de query, independientemente de cuántos se actualizaron. |
| El número de documentos que han sido modificados durante la operación de actualización. Si un documento actualizado es idéntico al original, no se incluye en este recuento. |
| El documento de resultado sin procesar devuelto por el servidor. |
| El ID del documento que se actualizó en la base de datos, si el driver realizó una inserción. De lo contrario, |
Información Adicional
Para obtener más información sobre cómo crear filtros de query, se puede consultar la Especificar una query.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: