Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Update Documents

En esta guía, puedes aprender a usar el driver Ruby para actualizar documentos en una colección de MongoDB utilizando los métodos update_one y update_many.

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.

Puedes actualizar documentos en MongoDB utilizando los siguientes métodos:

  • update_oneActualizar el primer documento que coincida con los criterios de búsqueda

  • update_many: actualiza todos los documentos que cumplen con los criterios de búsqueda

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

  • filtro de query, que hace coincidir los documentos que deseas actualizar. Para obtener más información sobre los filtros de query, consulta la guía Especificar una query.

  • Actualizar documento, que especifica el operador de actualización y los campos y valores a actualizar. El operador de actualización especifica el tipo de actualización a realizar. Para ver una lista de operadores de actualización y aprender sobre sus usos, 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 encontrar el primer documento donde el valor del campo name sea "Happy Garden". Luego utiliza el operador $set para actualizar el valor del campo name a "Mountain House".

filter = { name: 'Happy Garden' }
update = { '$set' => { name: 'Mountain House' } }
single_result = collection.update_one(filter, update)
puts "#{single_result.modified_count} document(s) updated."
1 document(s) updated

El siguiente ejemplo usa el método update_many para actualizar todos los documentos en los que el valor del campo name es "Starbucks". El documento de actualización utiliza el operador $rename para cambiar el nombre del campo address a location.

filter = { name: 'Starbucks' }
update = { '$rename' => { address: 'location' } }
many_result = collection.update_many(filter, update)
puts "#{many_result.modified_count} document(s) updated."
11 document(s) updated

El parámetro upsert permite utilizar las operaciones update_one() y update_many() para realizar una operación condicional:

  • Si el documento especificado existe, el comando lo actualiza.

  • Si el documento especificado no existe, el comando creará un nuevo documento con el parámetro especificado.

Para obtener más información, consulte la sección Ejemplo de modificación de actualización o la tabla de opciones en esta página.

Los métodos update_one y update_many aceptan opciones para configurar la operación de actualizar. Puede enviar estas opciones individualmente como parámetros, o puede crear un objeto Hash que contenga las opciones y pasar el objeto como parámetro. Si no especificas ninguna opción, el driver realiza la operación de actualización con la configuración por defecto.

La siguiente tabla describe las opciones que se pueden utilizar para configurar la operación de actualización:

Opción
Descripción

upsert

Indica 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.
Valor predeterminado: false

bypass_document_validation

Indica 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.
Valor predeterminado: false

collation

Intercalación de idiomas que se utilizará al ordenar los resultados. Para obtener más información, consulte la sección "Intercalación" en el manual del servidor MongoDB.

array_filters

Lista de filtros que usted especifica para seleccionar a qué elementos de la matriz se aplica la actualización.

hint

Índice que se utilizará para la búsqueda de documentos. Para obtener más información,consulte la instrucción de sugerencia en el manual del servidor MongoDB.

let

Mapa de nombres y valores de parámetros para definir las variables de nivel superior de la operación. Los valores deben ser constantes o expresiones cerradas que no hagan referencia a campos del documento. Para obtener más información, consulte la instrucción `let` en el manual del servidor MongoDB.

El ejemplo utiliza el operador $equal para hacer coincidir los documentos donde el valor del campo name es "Sunrise Pizzeria". Luego utiliza el operador $set para establecer el valor del campo borough en el primer documento coincidente en "Queens" y el valor del campo cuisine en "Italian".

Debido a que la opción upsert está configurada como true, si el filtro de query no coincide con ningún documento existente, el driver inserta un nuevo documento que contiene los campos y valores en los documentos de filtro y actualizaciones.

filter = { 'name' => 'Sunrise Pizzeria' }
update = { '$set' => { borough: 'Queens', cuisine: 'Italian' } }
upsert_result = collection.update_one(filter, update, upsert: true)
puts "#{upsert_result.modified_count} document(s) updated."
1 document(s) updated

Los métodos update_one y update_many devuelven cada uno un objeto Result. Puede acceder a los siguientes métodos desde una instancia Result:

Método
Descripción

matched_count

Número de documentos que coincidieron con el filtro de la consulta, independientemente de cuántas actualizaciones se hayan realizado.

modified_count

Número de documentos modificados por la operación de actualización. Si un documento actualizado es idéntico al original, no se incluye en este recuento.

acknowledged?

Devuelve true si el servidor reconoce el resultado.

upserted_count

Devuelve el número de documentos que se insertaron o actualizaron en la base de datos, si el controlador realizó una operación de inserción o actualización.

upserted_ids

Devuelve el valor _id del document que fue inserción en la base de datos, si el driver realizó una inserción.

Tip

Verifique el valor del método acknowledged? antes de intentar llamar a cualquier otro método Result. Si el método acknowledged? devuelve false, el controlador genera una excepción InvalidOperation si se intenta llamar a cualquier otro método en el objeto Result. El driver no puede determinar estos valores si el servidor no reconoce la operación de guardado.

Para ver ejemplos de código ejecutables que demuestran cómo actualizar documentos utilizando el driver de Ruby, consulta Insertar documentos.

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