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

Configurar las operaciones CRUD

En esta guía, puedes aprender cómo utilizar el driver de Node.js para configurar operaciones de lectura y guardar.

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:

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 una instancia MongoClient pasando un objeto MongoClientOptions al constructor. El código configura los siguientes ajustes:

  • SECONDARY preferencia de lectura: Las operaciones de lectura recuperan datos de miembros secundarios del conjunto de réplicas

  • local nivel de consistencia 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 nivel de consistencia 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 nivel de consistencia 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.

Por defecto, el driver de Node.js ignora las etiquetas al elegir un nodo desde el cual leer. Para indicarle al driver de Node.js que prefiera ciertas etiquetas, páselos como un parámetro al constructor de su 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. Nodos del centro de datos de Nueva York ({ dc: 'ny' })

  2. Nodos 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 }
);

Cuando se conecta a un set de réplicas con una preferencia de lectura que no es primaria, el driver lee del miembro elegible más cercano del set de réplicas dentro de la ventana de latencia. Al conectarse a un clúster fragmentado, el controlador selecciona entre todas las instancias mongos accesibles dentro de la ventana de latencia. Para aprender sobre los modos de preferencia de lectura, consulte Preferencia de lectura.

Por defecto, el controlador utiliza únicamente los servidores cuyos tiempos de ping se encuentren dentro de 15 milisegundos del servidor elegible más cercano.

Por ejemplo, supongamos que su set de réplicas tiene cinco nodos y el nodo más cercano tiene un tiempo de ping de 5 milisegundos. Con el valor por defecto de localThresholdMS de 15 milisegundos, solo los nodos con un tiempo de ping de 20 milisegundos o menos están dentro de la ventana de latencia, como se muestra en la tabla siguiente:

host
Tipo
Tiempo de ping
Dentro de la Ventana de Latencia

host1

Primario

5ms

host2

secundario

9ms

host3

secundario

13ms

host4

secundario

24ms

No

host5

secundario

42ms

No

Para ajustar la ventana de latencia, pasa 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, crear un objeto collation y establecer su campo locale en la intercalación del lenguaje que se desee utilizar. Luego, pase este objeto como un parámetro de opciones al método correspondiente al nivel de intercalación objetivo.

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 localización phonebook indica al driver que ordene los caracteres con diéresis antes que los mismos caracteres sin diéresis. Como resultado, la operación coincide con el documento que tiene un valor first_name de "Günter", con una 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: