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, puede aprender a utilizar el controlador Node.js para configurar operaciones de lectura y escritura.

Puedes controlar cómo el driver direcciona las operaciones de lectura configurando una preferencia de lectura. También puedes controlar cómo el driver gestiona la coherencia y durabilidad de los datos configurando un nivel de consistencia de lectura o un nivel de confirmación de escritura (write concern). Los niveles de consistencia de lectura especifican el nivel de durabilidad requerido para los datos al realizar operaciones de lectura, y los niveles de confirmación de escritura (write concern) especifican cómo el driver espera el reconocimiento de las operaciones de escritura en un set 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

  • 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.

Tip

Para obtener más información sobre la configuración de lectura y escritura, consulta las siguientes guías en el manual del servidor MongoDB:

  • preferencia de lectura

  • readConcern

  • Nivel de confirmación de escritura

Esta sección muestra cómo configurar los ajustes de lectura y guardado en cada nivel.

Este ejemplo muestra cómo establecer la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de un MongoClient instancia usando un objeto MongoClientOptions en el constructor. El código configura la siguiente configuración:

  • SECONDARY Preferencia de lectura: las operaciones de lectura recuperan datos de los miembros del conjunto de réplicas secundarias

  • local Preocupación de lectura: las operaciones de lectura devuelven los datos más recientes de la instancia sin garantizar que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas

  • 2 nivel de confirmación de escritura (write concern): el primario/a y uno secundario del set de réplicas debe confirmar la operación de escritura

const clientOptions = {
readPreference: ReadPreference.SECONDARY,
readConcern: { level: "local" },
writeConcern: { w: 2 },
};
const client = new MongoClient("mongodb://localhost:27017", clientOptions);

Alternativamente, se pueden especificar los ajustes de lectura y guardado en el URI de conexión, que se pasa como un parámetro al constructor MongoClient:

const uri = "mongodb://localhost:27017/?readPreference=secondary&readConcernLevel=local&w=2";
const clientWithUri = new MongoClient(uri);

Este ejemplo muestra cómo establecer la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de una transacción pasando un objeto TransactionOptions al método startTransaction(). El código configura la siguiente configuración:

  • PRIMARY preferencia de lectura: las operaciones de lectura recuperan datos del miembro principal del set de réplicas

  • majority nivel de consistencia de lectura: Las operaciones de lectura devuelven los datos más recientes de la instancia que se han escrito en la mayoría de los miembros del set de réplicas.

  • 1 nivel de confirmación de escritura (write concern): The primary set de réplicas must acknowledge the write operation

const transactionOptions = {
readPreference: ReadPreference.PRIMARY,
readConcern: { level: "majority" },
writeConcern: { w: 1 },
};
const session = client.startSession();
session.startTransaction(transactionOptions);

Este ejemplo muestra cómo establecer la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de una base de datos llamada test_database pasando un objeto DbOptions al método db(). El código configura la siguiente configuración:

  • PRIMARY_PREFERRED preferencia de lectura: Las operaciones de lectura recuperan datos desde el miembro principal del set de réplicas, o desde miembros secundarios si el principal no está disponible.

  • available Preocupación de lectura: las operaciones de lectura devuelven los datos más recientes de la instancia sin garantizar que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas

  • majority nivel de confirmación de escritura (write concern): La mayoría de todos los miembros del conjunto de réplicas deben reconocer la operación de escritura

const dbOptions = {
readPreference: ReadPreference.PRIMARY_PREFERRED,
readConcern: { level: "available" },
writeConcern: { w: "majority" },
};
const db = client.db("test_database", dbOptions);

Este ejemplo muestra cómo establecer la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de una colección llamada test_collection pasando un objeto CollectionOptions al método collection(). El código configura la siguiente configuración:

  • SECONDARY_PREFERRED preferencia de lectura: Las operaciones de lectura recuperan datos de los miembros secundarios del conjunto de réplicas o de los miembros primarios si no hay secundarios disponibles

  • available Preocupación de lectura: las operaciones de lectura devuelven los datos más recientes de la instancia sin garantizar que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas

  • 0 nivel de confirmación de escritura (write concern): No solicita reconocimiento de la operación de escritura

const collOptions = {
readPreference: ReadPreference.SECONDARY_PREFERRED,
readConcern: { level: "available" },
writeConcern: { w: 0 },
};
const collection = db.collection("test_collection", collOptions);

En MongoDB Server, puedes aplicar etiquetas de clave-valor a los miembros de un conjunto de réplicas según los criterios que elijas. Luego, puede usar esas etiquetas para dirigir una operación de lectura a uno o más nodos.

De forma predeterminada, el controlador de Node.js ignora las etiquetas al elegir un miembro para leer. Para indicarle que prefiera ciertas etiquetas, páselas como parámetro al constructor de la clase de preferencia de lectura.

Este ejemplo de código establece la opción readPreference en un conjunto de etiquetas que indica a test_database que prefiera lecturas de miembros secundarios del conjunto de réplicas en el siguiente orden:

  1. Miembros del centro de datos de Nueva York ({ dc: 'ny' })

  2. Miembros del centro de datos de San Francisco ({ dc: 'sf' })

  3. Cualquier miembro secundario ({})

const taggedReadPreference = new ReadPreference(
ReadPreference.SECONDARY,
[
{ dc: "ny" },
{ dc: "sf" },
{}
]
);
const dbWithTags = client.db(
"test_database",
{ readPreference: taggedReadPreference }
);

Si varios miembros del set de réplicas cumplen con la preferencia de lectura y los conjuntos de etiquetas especificados, el driver de Node.js leerá de los miembros del set de réplicas más cercanos, elegidos según su tiempo de ping.

Por defecto, el driver utiliza solo aquellos nodos cuyos tiempos de ping están dentro de 15 milisegundos del nodo más cercano para las queries. Para distribuir las lecturas entre miembros con mayor latencia, pase la opción localThresholdMS al constructor MongoClient().

El siguiente ejemplo especifica un umbral local de 35 milisegundos:

const clientWithLocalThreshold = new MongoClient("mongodb://localhost:27017", {
replicaSet: "repl0",
readPreference: ReadPreference.SECONDARY_PREFERRED,
localThresholdMS: 35
});

En el ejemplo anterior, el driver de Node.js distribuye las lecturas entre los nodos que coinciden dentro de 35 milisegundos del tiempo de ping del nodo más cercano.

Nota

El driver de Node.js ignora el valor de localThresholdMS cuando se comunica con un set de réplicas a través de una instancia mongos. En este caso, utiliza la opción de línea de comando localThreshold.

Puedes especificar una intercalación para modificar el comportamiento de las operaciones de lectura y escritura. Una intercalación es un conjunto de reglas específicas de cada lenguaje para la comparación de strings, como las relacionadas con las mayúsculas y los signos diacríticos.

MongoDB ordena cadenas utilizando intercalación binaria de forma predeterminada. Esta intercalación por defecto utiliza los valores de caracteres estándar ASCII para comparar y ordenar cadenas. Los lenguajes y las localizaciones tienen convenciones específicas de ordenación de caracteres que difieren del estándar ASCII, y se puede optar por aplicar un conjunto diferente de reglas de intercalación a una operación.

Puede especificar una intercalación en los siguientes niveles:

  • Colección: Establece la intercalación por defecto para las operaciones en la colección. No puede definir una intercalación para una colección existente.

  • Índice: Establece la intercalación para las operaciones que utilizan el índice.

  • Operation: establece la intercalación de la operación y anula cualquier intercalación heredada.

El objeto de intercalación contiene los siguientes campos:

collation: {
locale: <string>,
caseLevel: <bool>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <bool>,
alternate: <string>,
maxVariable: <string>,
backwards: <bool>
}

Al configurar la opción collation, debes especificar el campo locale. Todos los demás campos son opcionales. Para obtener una lista completa de locales admitidos y los valores predeterminados para los campos locale, consulte Idiomas y localidades admitidos en el Manual del Servidor de MongoDB.

Para especificar una intercalación, cree un objeto collation y asigne a su campo locale la intercalación de idioma que desee usar. A continuación, pase este objeto como parámetro de opciones al método correspondiente al nivel de intercalación de destino.

Esta sección incluye ejemplos que establecen intercalaciones en los niveles de colección, índice y operación.

El siguiente ejemplo crea una nueva colección llamada names y establece su intercalación por defecto en la localización "fr_CA":

const db = client.db("db")
db.createCollection("names", {
collation: { locale: "fr_CA" },
});

Puedes crear un índice en la colección names que especifique una intercalación diferente, como se muestra en el siguiente ejemplo:

const coll = db.collection("names");
coll.createIndex(
{ "last_name" : 1 },
{ "collation" : { "locale" : "en_US" } });

Puede ejecutar una operación en la colección names, creada en la sección anterior, que anula la intercalación por defecto.

La colección names contiene los siguientes documentos:

{ "_id" : 1, "first_name" : "Hans", "last_name" : "Muller" }
{ "_id" : 2, "first_name" : "Gunter", "last_name" : "Braun" }
{ "_id" : 3, "first_name" : "Günter", "last_name" : "Krause" }
{ "_id" : 4, "first_name" : "Jürgen", "last_name" : "Weber" }

Este ejemplo llama al método findOneAndUpdate() para actualizar el primer documento que coincida y que tenga un valor de first_name de "Gunter". El código aplica una intercalación con la localización de "de" y la variante de localización de "phonebook":

coll.findOneAndUpdate(
{ first_name: { $lt: "Gunter" } },
{ $set: { verified: true } },
{ collation: { locale: "de@collation=phonebook" } },
);

En el ejemplo anterior, la variante de configuración regional phonebook indica al controlador que ordene los caracteres con diéresis antes que los mismos caracteres sin diéresis. Como resultado, la operación coincide con el documento cuyo valor first_name es "Günter", con diéresis, y devuelve la siguiente información de actualización:

{ lastErrorObject: { updatedExisting: true, n: 1 },
value: { _id: 3, first_name: 'Günter', last_name: 'Krause' },
ok: 1 }

Tip

Para obtener más información sobre las variantes de localización, consulte Variantes locales en el manual de MongoDB Server.

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

Volver

Core API

En esta página