Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Configurar las operaciones CRUD

En esta guía, puedes aprender a utilizar las configuraciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura para modificar la forma en que MongoDB ejecuta operaciones de crear, leer, actualizar y borrar (CRUD) en sets de réplicas.

Puedes establecer las opciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura en los siguientes niveles:

  • Cliente, que establece el por defecto para todas las ejecuciones de operaciones, a menos que se anule

  • sesión

  • transacción

  • Database

  • Colección

La lista anterior también indica el orden creciente de precedencia de la configuración de las opciones. Por ejemplo, si estableces un nivel de consistencia de lectura para una transacción, este anulará cualquier nivel de consistencia de lectura configurado para el cliente.

Estas opciones permiten personalizar la coherencia causal y la disponibilidad de los datos en los sets de réplicas.

El nivel de confirmación de escritura (write concern) especifica el nivel de reconocimiento solicitado a MongoDB para las operaciones de escritura, como una inserción o actualización, antes de que la operación se devuelva con éxito. Las operaciones que no especifican un nivel de confirmación de escritura (write concern) explícito heredan la configuración global de nivel de confirmación de escritura (write concern) por defecto.

Para más información, consulte nivel de confirmación de escritura (write concern) en el manual de MongoDB Server. Para obtener documentación detallada de la API, consulta la documentación sobre la API de nivel de confirmación de escritura (write concern).

La siguiente tabla describe el write_concern parámetros:

Parameter
Tipo
Descripción

w (opcional)

entero o cadena de texto

Solicita el reconocimiento de que la operación de escritura se ha propagado a un número especificado de instancias mongod o a mongod instancias que están etiquetadas con etiquetas específicas.

wtimeoutMS (opcional)

entero

Especifica un límite de tiempo para evitar que las operaciones de escritura queden bloqueadas indefinidamente.

journal (opcional)

booleano

Solicita el reconocimiento de que la operación de escritura se ha guardado en el diario en disco.

El siguiente código crea un nuevo documento y especifica la configuración del nivel de confirmación de escritura (write concern) w y wtimeout:

client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'myDB')
myDB = client.database
myCollection = myDB[:myCollection]
myCollection.insert_one(
{ name: 'anotherDocumentName' },
write: {
w: 2,
wtimeout: 5000
}
)

El siguiente código utiliza el método new_write_concern para construir un write_concern a partir de las opciones de una referencia de base de datos existente, myDB. Luego, el nuevo nivel de confirmación de escritura (write concern) se aplica a un documento insertado.

myDoc = { name: 'New Document' }
new_write_concern = Mongo::WriteConcern.get(myDB.write_concern)
myDB[:myCollection].with(write: new_write_concern).insert_one(myDoc)

Nota

myDB se puede sustituir por una referencia a cualquier entidad que acepte una opción de nivel de confirmación de escritura (write concern).

El nivel de consistencia de lectura especifica los siguientes comportamientos:

Puede especificar el ajuste de nivel de consistencia de lectura utilizando el parámetro level. El nivel de consistencia de lectura predeterminado es local. Esto significa que el cliente devuelve los datos del miembro del set de réplicas al que está conectado el cliente, sin garantía de que los datos hayan sido escritos en todos los miembros del set de réplicas.

Nota

Requisitos de nivel de consistencia de lectura más bajos pueden reducir la latencia.

Para obtener más información sobre los niveles de consistencia de lectura o los niveles de consistencia de lectura, consulta Nivel de consistencia de lectura en el manual de MongoDB Server. Para obtener más detalles sobre el read_concern tipo y las definiciones de los niveles de consistencia de lectura, consulte nivel de consistencia de lectura en la documentación de API.

El siguiente código configura el nivel de consistencia de lectura de una agregación a "available":

pipeline = [
{ "$match" => { category: 'KITCHENWARE' } },
{ "$unset" => ['_id', 'category'] }
]
result = myCollection.aggregate(pipeline,
read: { read_concern: { level: :available } })

Tip

Para obtener más información sobre las operaciones de agregación, consulte Transforme sus datos con la guía de agregación.

El siguiente código cambia el nivel de consistencia de lectura de una base de datos a "local":

client = Mongo::Client.new(['IP_ADDRESS_001:27017'],
database: 'mydb',
read_concern: { level: :local })
myDB = client.database

La preferencia de lectura determina de qué nodo de un set de réplicas de MongoDB se realiza una lectura al ejecutar una query.

Para una documentación de la API más detallada, consulta la Documentación de la API de Preferencias de Lectura.

La siguiente tabla muestra las opciones que puede utilizar para personalizar cómo el servidor evalúa a los miembros:

Parameter
Tipo
Descripción

mode

Symbol

Especifica un requisito o preferencia sobre qué miembro del set de réplicas lee el servidor. El modo predeterminado, :primary, especifica que las operaciones leen del miembro principal del set de réplicas.

tags (opcional)

Array<Hash>

Asigna etiquetas a los miembros secundarios del conjunto de réplicas para personalizar cómo el servidor los evalúa. Las etiquetas no se pueden usar con la configuración del modo de preferencia de lectura :primary.

options (opcional)

Hash

Establece varias opciones, incluidas hedge y maxStalenessSeconds que pueden aplicarse a la preferencia de lectura.

El siguiente código configura la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) para las operaciones en una transacción:

transaction_options = {
read: { mode: :primary },
read_concern: { level: :local },
write_concern: { w: :majority }
}
session = client.start_session
session.start_transaction(transaction_options)
session.commit_transaction
# ...
rescue => e
session.abort_transaction
puts "Transaction aborted due to an error: #{e.message}"
ensure
session.end_session
end

Tip

Para obtener más información sobre las transacciones, consulta la guía de Transacciones.

Este ejemplo de código crea un MongoClient que utiliza el modo de preferencia de lectura secondary al realizar consultas en un clúster:

uri = 'mongodb+srv://<user>:<password>@<cluster-url>'
options = {
read: {
mode: :secondary,
max_staleness: 120
}
}
client = Mongo::Client.new(uri, options)
myDB = client.database

El ejemplo anterior también establece la maxStalenessSeconds opción 120 en. Para obtener más información sobre las opciones de la cadena de conexión, consulte la sección "Opciones de la cadena de conexión" en el manual de MongoDB Server.

El controlador de Ruby reintenta automáticamente ciertas operaciones de lectura y escritura una vez en caso de que fallen debido a un error de red o de servidor.

Puede deshabilitar explícitamente las lecturas o escrituras reintentables modernas configurando las opciones retry_reads o retry_writes en false al crear un nuevo cliente. Si se configura en false, se habilita el comportamiento de reintento heredado.

El siguiente ejemplo desactiva las lecturas y guardados reintentar automáticas modernas para un cliente:

uri = 'mongodb+srv://<user>:<password>@<cluster-url>'
options = {
retry_reads: false,
retry_writes: false
}
client = Mongo::Client.new(uri, options)
myDB = client.database

Para obtener más información sobre las operaciones de lectura repetibles admitidas, consulte Lecturas repetibles en el manual de MongoDB Server. Para obtener más información sobre las operaciones de escritura reintentables admitidas, consulta Escrituras reintentables en el manual del MongoDB Server.

Para obtener más información sobre los métodos y tipos mencionados en esta guía, vea la siguiente documentación de la API:

Volver

Transacciones