Docs Menu
Docs Home
/ /

Configurar las operaciones CRUD

En esta guía, puede aprender a usar las configuraciones de preocupaciónde escritura,preocupación de lectura y preferencia de lectura para modificar la forma en que MongoDB ejecuta operaciones de creación, lectura, actualización y eliminación (CRUD) en conjuntos de réplicas.

Puede establecer opciones de preocupación de escritura, preocupación de lectura y preferencia de lectura en los siguientes niveles:

  • Cliente, que establece el valor predeterminado 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 de prioridad creciente de la configuración de las opciones. Por ejemplo, si se establece un nivel de lectura para una transacción, este anulará el nivel de lectura establecido para el cliente.

Estas opciones le permiten personalizar la consistencia causal y la disponibilidad de los datos en sus conjuntos de réplicas.

La preocupación de escritura especifica el nivel de confirmación solicitado a MongoDB para operaciones de escritura, como una inserción o una actualización, antes de que la operación se retorne correctamente. Las operaciones que no especifican una preocupación de escritura explícita heredan la configuración global predeterminada de la preocupación de escritura.

Para más información, consulte Escribir preocupación en el manual del servidor MongoDB. Para obtener documentación detallada de la API, consulte la documentación de la API de Escribir preocupación.

La siguiente tabla describe la write_concern parámetros:

Parameter
Tipo
Descripción

w (opcional)

entero o cadena de texto

Solicita reconocimiento de que la operación de escritura se ha propagado a una cantidad específica de mongod instancias 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 reconocimiento de que la operación de escritura se ha escrito en el diario del disco.

El siguiente código crea un nuevo documento y especifica las configuraciones de escritura 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. A continuación, la nueva solicitud de escritura 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 reemplazar con una referencia a cualquier entidad que acepte una opción de escritura.

La preocupación de lectura especifica los siguientes comportamientos:

Puede especificar la configuración de la preocupación de lectura mediante el parámetro level. El nivel de preocupación de lectura predeterminado es local. Esto significa que el cliente devuelve los datos del miembro del conjunto de réplicas al que está conectado, sin garantía de que se hayan escrito en todos los miembros del conjunto de réplicas.

Nota

Los requisitos de nivel de lectura más bajos pueden reducir la latencia.

Para obtener más información sobre las preocupaciones de lectura o sus niveles, consulte "Preocupación 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 preocupación de lectura, consulte "Preocupación de lectura" en la documentación de la API.

El siguiente código establece el nivel de preocupación de lectura de una agregación en "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 preocupación 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 qué miembro de un conjunto de réplicas lee MongoDB cuando se ejecuta una consulta.

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 el miembro del conjunto de réplicas del que lee el servidor. El modo predeterminado, :primary, especifica que las operaciones leen desde el miembro principal del conjunto de réplicas.

tags (opcional)

Array<Hash>

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

options (opcional)

Hash

Establece varias opciones, incluidas las de cobertura y maxStalenessSeconds, que se pueden aplicar a sus preferencias de lectura.

El siguiente código establece la preferencia de lectura, la preocupación de lectura y la preocupación de escritura 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, consulte 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 Ruby vuelve a intentar automáticamente ciertas operaciones de lectura y escritura una vez si fallan debido a un error de red o 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 deshabilita las lecturas y escrituras reintentables 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 reintentable compatibles, consulte "Lecturas reintentables" en el manual de MongoDB Server. Para obtener más información sobre las operaciones de escritura reintentable compatibles, consulte "Escrituras reintentables" en el manual de MongoDB Server.

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

Volver

Transacciones