Overview
En esta guía, aprenderá a usar PyMongo para realizar una operación de reemplazo en un documento de una colección de MongoDB. Una operación de reemplazo funciona de forma diferente a una operación de actualización. Una operación de actualización modifica solo los campos especificados en un documento de destino. Una operación de reemplazo elimina todos los campos del documento de destino y los reemplaza por otros nuevos.
Para obtener más información sobre las operaciones de actualización, consulte la Guía de actualización de documentos.
Datos de muestra
Los ejemplos de esta guía utilizan el sample_restaurants.restaurants colección de la 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, consulta el tutorial "Comienza con PyMongo".
Operación de reemplazo
Puede realizar una operación de reemplazo en MongoDB con el método replace_one(). Este método elimina todos los campos excepto el campo _id del primer documento que coincida con los criterios de búsqueda. A continuación, inserta los campos y valores especificados en el documento.
Parámetros requeridos
El método replace_one() requiere los siguientes parámetros:
Un documento de filtro de consulta, que determina qué documentos reemplazar. 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 reemplazo, que especifica los campos y valores a insertar en el nuevo documento.
Reemplace uno
El siguiente ejemplo utiliza el método replace_one() para reemplazar los campos y valores de un documento con un valor de campo name de "Pizza Town":
restaurants = database["restaurants"] query_filter = {"name" : "Pizza Town"} replace_document = { "name" : "Mongo's Pizza", "cuisine" : "Pizza", "address" : { "street" : "123 Pizza St", "zipCode" : "10003" }, "borough" : "Manhattan" } result = restaurants.replace_one(query_filter, replace_document)
Importante
Los valores de los campos _id son inmutables. Si el documento de reemplazo especifica un valor para el campo _id, este debe coincidir con el valor _id del documento existente.
Personalizar la operación de reemplazo
El método replace_one() acepta opcionalmente parámetros adicionales, que representan opciones que se pueden usar para configurar la operación de reemplazo. Si no se especifican opciones adicionales, el controlador no personaliza la operación de reemplazo.
Propiedad | Descripción |
|---|---|
| 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. Defaults to False |
| Specifies whether the replace operation bypasses document validation. This lets you
replace 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. |
| Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. |
| Gets or sets the index to scan for documents.
For more information, see the hint statement
in the MongoDB Server manual. |
| An instance of ClientSession. |
| 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. |
| A comment to attach to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
El siguiente código usa el método replace_one() para encontrar el primer documento donde el campo name tiene el valor "Food Town" y lo reemplaza por uno nuevo llamado "Food World". Dado que la opción upsert está establecida en True, el controlador inserta un nuevo documento si el filtro de consulta no coincide con ningún documento existente.
restaurants = database["restaurants"] query_filter = {"name" : "Food Town"} replace_document = { "name" : "Food World", "cuisine" : "Mixed", "address" : { "street" : "123 Food St", "zipCode" : "10003" }, "borough" : "Manhattan" } result = restaurants.replace_one(query_filter, replace_document, upsert = True)
Valor de retorno
El método replace_one() devuelve un objeto UpdateResult. El tipo UpdateResult contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| The number of documents that matched the query filter, regardless of
how many were updated. |
| 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. |
| The raw result document returned by the server. |
| The ID of the document that was upserted in the database, if the driver
performed an upsert. Otherwise None. |
Información Adicional
Para obtener más información sobre cómo crear filtros de consulta, consulte la guía Especificar una consulta.
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: