Overview
En esta guía, puedes aprender a utilizar el controlador Ruby para realizar una operación de reemplazo en un documento de una colección MongoDB. Una operación de reemplazo remueve todos los campos y valores de un documento específico excepto el campo _id, y añade nuevos campos y valores que tú especifiques. Esta operación difiere de una operación de actualización, que solo cambia los campos especificados en uno o más documentos.
Para obtener más información sobre las operaciones de actualización, consulte la guía Actualizar documentos.
Datos de muestra
Los ejemplos de esta guía utilizan la colección restaurants en la base de datos sample_restaurants de los conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde tu aplicación Ruby, crea un objeto Mongo::Client que se conecte a un clúster de Atlas y asigna los siguientes valores a tus variables database y collection:
database = client.use('sample_restaurants') collection = database[:restaurants]
Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulta la guía MongoDB Get Started.
Operación de reemplazo
Puedes realizar una operación de reemplazo en MongoDB usando el método replace_one. Este método remueve todos los campos excepto el campo _id del primer documento que coincida con el filtro de query especificado. Luego agrega los campos y valores que especifiques al documento vacío.
Parámetros necesarios
Debes pasar los siguientes parámetros al método replace_one:
Filtro de query: Especifica qué documentos actualizar. Para obtener más información sobre los filtros de query, consulta la guía Especificar una query.
Documento de reemplazo: Especifica los campos y valores que deseas reemplazar por los campos y valores existentes.
Ejemplo de reemplazo
El siguiente ejemplo utiliza el método replace_one para reemplazar los campos y valores de un documento en el que el valor del campo name es "Primola Restaurant":
filter = { name: 'Primola Restaurant' } new_document = { name: 'Frutti Di Mare', cuisine: 'Seafood', borough: 'Queens' } result = collection.replace_one(filter, new_document) puts "Replaced #{result.modified_count} document(s)"
Replaced 1 document(s)
Importante
El valor del campo _id es inmutable. Si su documento de reemplazo contiene un valor para el campo _id, este debe ser el mismo que el valor _id del documento existente o el controlador lanzará un WriteError.
Personalizar la operación de reemplazo
Puede pasar un objeto Hash como parámetro al método replace_one para establecer opciones que configuren la operación de reemplazo. Si no especifica ninguna opción, el driver realiza la operación de reemplazo con la configuración por defecto.
La siguiente tabla describe las opciones que puedes usar para configurar la operación de reemplazo:
Opción | Descripción |
|---|---|
| Especifica si la operación de reemplazo realiza una operación inserción si ningún documentos coincide con el filtro de query. Para obtener más información, consulte comportamiento de inserción en el manual de MongoDB Server. |
| 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 a usar al ordenar los resultados. Para obtener más información, consulte intercalación en el manual de MongoDB Server. |
| Especifica la sesión que se utilizará para la operación. Para obtener más información sobre las sesiones, consulte Sesiones de cliente y garantías de coherencia causal en el manual de MongoDB Server. |
| Establece el índice que se utilizará al emparejar document. Para más información, consulta la instrucción de pistas en el manual de MongoDB Server. |
| Proporciona un mapa de nombres de parámetros y valores para definir variables de nivel superior para la operación. Los valores deben ser constantes o expresiones cerradas que no hagan referencia a campos del documento. |
El siguiente código realiza la misma operación de reemplazo que el ejemplo anterior, pero establece la opción upsert en true. Esto indica al controlador que inserte un nuevo documento que tenga los campos y valores especificados en el documento de reemplazo si el filtro de query no coincide con ningún documento existente:
options = { upsert: true } result = collection.replace_one(filter, new_document, options) puts "Replaced #{result.upserted_count} document(s)"
Replaced 1 document(s)
Valor de retorno
El método replace_one retorna un objeto Mongo::Operation::Update::Result. Se pueden utilizar los siguientes métodos para acceder a la información de una instancia Result:
Método | Descripción |
|---|---|
| Devuelve el número de documentos que coinciden con el filtro de query. |
| Devuelve el número de documentos modificados por la operación de actualización. Si un document actualizado es idéntico al original, no se incluye en este recuento. |
| Devuelve el número de documentos actualizados insertando (upserted). |
| Devuelve el valor |
Información Adicional
Para ver un ejemplo de código ejecutable que demuestre cómo reemplazar un documento, consulta Insertar documentos.
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: