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

Modificar la ejecución de las operaciones CRUD

En esta guía, puedes aprender a modificar la forma en que el Driver de Go de MongoDB ejecuta las operaciones de creación, lectura, actualización y eliminación (CRUD) mediante las configuraciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura para 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:

  • A nivel de cliente, que establece por defecto para todas las ejecuciones de operaciones, a menos que se sobrescriba.

  • Nivel de sesión

  • Nivel de transacción

  • Nivel de base de datos

  • A nivel de colección

En las siguientes secciones, puedes aprender cómo personalizar la coherencia y la disponibilidad de los datos en tus sets de réplicas.

Una nivel de confirmación de escritura (write concern) describe el número de miembros que almacenan datos en un set de réplicas que deben confirmar una operación de escritura, como una inserción o actualización, antes de que la operación se devuelva como exitosa. Por defecto, el nivel de confirmación de escritura (write concern) requiere que solo el miembro principal del conjunto de réplicas reconozca la operación de escritura antes de considerar la operación como exitosa.

El controlador MongoDB Go brinda el paquete writeconcern, que permite especificar el nivel de confirmación de escritura (write concern) para un set de réplicas. Configure el nivel de confirmación de escritura (write concern) con el método SetWriteConcern() y el tipo WriteConcern. El tipo WriteConcern tiene los siguientes métodos para seleccionar especificaciones comunes de nivel de confirmación de escritura (write concern):

Método
Descripción

Custom()

El cliente solicitud una confirmación de que las operación de guardar se propagan a los nodo etiqueta de una instancia de mongod. Para obtener más información, consulte la especificación de nivel de confirmación de escritura (write concern).

Parámetro: string

Journaled()

El cliente realiza una solicitud de reconocimiento de que las operaciones de escritura se realizan mediante el proceso de registrar en la bitácora en disco. Para obtener más información, consulte la especificación de nivel de confirmación de escritura (write concern).

Parámetro: ninguno

Majority()

El cliente solicita una confirmación de que las operaciones de guardar se propagan a la mayoría de los nodos de votación que contienen datos. Para obtener más información, consulte la especificación de nivel de confirmación de escritura (write concern).

Parámetro: ninguno

Unacknowledged()

El cliente no solicita acuse de recibo de las operaciones de guardar. Para obtener más información, consulte la especificación de nivel de confirmación de escritura (write concern) para w: 0.

Parámetro: ninguno

W1()

El cliente hace una solicitud de reconocimiento de que las operaciones de guardar se han guardado en la memoria en un nodo, como el MongoD autónomo o el primario en un set de réplicas. Para obtener más información, consulte la especificación de nivel de confirmación de escritura (write concern) para w: 1.

Parámetro: ninguno

Si necesitas un nivel de confirmación de escritura (write concern) más especializado, puedes definir un literal de struct personalizado WriteConcern. Puedes configurar los siguientes campos en una estructura WriteConcern:

Campo
Descripción

W

Especifica el número de instancias mongod o nodos etiquetados a los que deben propagarse las operaciones de escritura para su reconocimiento. Los valores comunes incluyen 1, 0 y "majority".

Tipo: string o int

Journal

Especifica si las operaciones de escritura deben guardarse en la bitácora en disco para su confirmación.

Tipo: bool

WTimeout

Especifica un límite de tiempo para el nivel de confirmación de escritura (write concern). Esta configuración solo se aplica a valores de W superiores a 1. Especificar esta configuración y un tiempo de espera en el cliente al mismo tiempo da como resultado un comportamiento indefinido. Para obtener más información, consulte la especificación de nivel de confirmación de escritura (write concern) para wtimeout.

Tipo: time.Duration

Tip

Alternativamente, puedes especificar un nivel de confirmación de escritura (write concern) en tu cadena de conexión. Consulta la entrada del manual del servidor sobre opciones de nivel de confirmación de escritura (write concern) para obtener más información.

El siguiente código muestra cómo se pueden especificar diferentes nivel de confirmación de escritura (write concern) a nivel de cliente y de colección. La nivel de confirmación de escritura (write concern) a nivel de cliente pide reconocimiento a dos miembros del conjunto de réplicas y establece el journalización en false. La nivel de confirmación de escritura (write concern) a nivel de colección solicita el reconocimiento de la mayoría de los miembros del conjunto de réplicas.

uri := "mongodb://<hostname>:<port>"
journal := false
cliWC := &writeconcern.WriteConcern{
W: 2,
Journal: &journal,
}
clOpts := options.Client().ApplyURI(uri).SetWriteConcern(cliWC)
client, err := mongo.Connect(context.TODO(), clOpts)
...
collWC := writeconcern.Majority()
collOpts := options.Collection().SetWriteConcern(collWC)
coll := client.Database("db").Collection("myColl", collOpts)

La opción de nivel de consistencia de lectura permite determinar qué datos devuelve el cliente desde una consulta. El nivel de consistencia de lectura predeterminado es "local", lo que significa que el cliente devuelve los datos más recientes de la instancia, sin garantía de que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas.

El controlador Go de MongoDB proporciona el paquete readconcern, que te permite especificar el nivel de consistencia de lectura para un set de réplicas. Establece el nivel de consistencia de lectura utilizando el método SetReadConcern() con un tipo ReadConcern. El tipo ReadConcern tiene los siguientes métodos para especificar el nivel de consistencia de lectura:

Método
Descripción

Available()

La query devuelve datos de la instancia sin garantía de que los datos hayan sido escritos en la mayoría de los miembros del set de réplicas. Para obtener más información, consulte la especificación de nivel de consistencia de lectura.

Linearizable()

La query devuelve datos que reflejan todas las escrituras exitosas emitidas con un nivel de confirmación de escritura (write concern) de majority y reconocidas antes del inicio de la operación de lectura. Para más información, consulta la especificación de nivel de consistencia de lectura.

Local()

La query devuelve los datos más recientes de la instancia. Para obtener más información, consulte la especificación de nivel de consistencia de lectura.

Majority()

La query devuelve los datos más recientes de la instancia, reconocidos como escritos en la mayoría de los miembros del conjunto de réplicas. Para más información, vea la especificación de nivel de consistencia de lectura.

Snapshot()

La query devuelve una copia completa de los datos en una instancia de mongod en un punto específico en el tiempo. Solo está disponible para operaciones dentro de transacciones multidocumento. Para obtener más información, consulte la especificación de nivel de consistencia de lectura.

El siguiente código muestra cómo puedes especificar un nivel de consistencia de lectura de "mayoría". El código selecciona un Collection con esta opción.

rc := readconcern.Majority()
opts := options.Collection().SetReadConcern(rc)
database := client.Database("db")
coll := database.Collection("myCollection", opts)

La opción de preferencia de lectura especifica cómo el cliente de MongoDB enruta las operaciones de lectura a los nodos de un set de réplicas. Por defecto, una aplicación dirige sus operaciones de lectura al miembro principal de un set de réplicas.

La preferencia de lectura consiste en el modo de preferencia de lectura y, opcionalmente, una lista de conjunto de etiquetas, la opción maxStalenessSeconds y la opción lectura protegida.

El MongoDB Go Driver proporciona el paquete readpref, que permite especificar la preferencia de lectura para un set de réplicas. Configura la preferencia de lectura usando el método SetReadPreference() con un tipo ReadPref. El tipo ReadPref tiene los siguientes métodos para especificar la preferencia de lectura:

Método
Descripción

Nearest()

El cliente lee de un miembro de set de réplicas elegible aleatorio, primario o secundario, en función de un umbral de latencia específico. Para obtener más información, consulte la entrada del manual de Preferencias de Lectura del Servidor.

Primary()

El cliente lee desde el nodo primario actual del set de réplicas. Para obtener más información, consulte la entrada del manual de Preferencias de Lectura del Servidor.

PrimaryPreferred()

El cliente lee desde el nodo primario en la mayoría de las situaciones. Si la primaria no está disponible, las operaciones se leen de los miembros secundarios. Para obtener más información, consulta la entrada del manual sobre Preferencia de lectura de servidor.

Secondary()

El cliente lee desde los miembros secundarios del set de réplicas. Para obtener más información, consulta la entrada del manual del servidor de preferencia de lectura.

SecondaryPreferred()

El cliente lee desde los nodos secundarios en la mayoría de las situaciones. Si las secundarias no están disponibles, las operaciones se leen desde el miembro primario. Para obtener más información, consulta la entrada del manual sobre Preferencia de lectura de servidor.

Tip

Como alternativa, puedes especificar una preferencia de lectura en tu cadena de conexión. Consulta la entrada del manual del servidor sobre Opciones de Preferencia de Lectura para obtener más información.

El siguiente código muestra cómo puedes especificar una preferencia de lectura para leer desde nodos secundarios. A continuación, el código selecciona un Database con esta opción.

rp := readpref.Secondary()
opts := options.Database().SetReadPreference(rp)
database := client.Database("db", opts)

Para obtener más información acerca de los conceptos de esta guía, consulta la siguiente documentación del servidor: