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

Bases de datos y colecciones

En esta guía, puedes aprender cómo usar bases de datos y colecciones de MongoDB con el driver de Ruby.

MongoDB organiza los datos en una jerarquía de los siguientes niveles:

  • Bases de datos: El nivel más alto de organización de datos en una instancia de MongoDB.

  • Colecciones: MongoDB almacena documentos en colecciones. Son análogos a las tablas en bases de datos relacionales.

  • Documentos: Contienen datos literales como strings, números, fechas y otros documentos incrustados.

Para obtener más información sobre los tipos y la estructura de los campos de documentos, consulte la guía Documentos en el manual de MongoDB Server.

Acceda a una base de datos creando una instancia de Mongo::Client con el nombre de base de datos deseado.

El siguiente ejemplo accede a una base de datos llamada test_database:

client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test_database')
database = client.database

Acceder a una colección utilizando el método [] en una instancia de tu base de datos.

El siguiente ejemplo accede a una colección llamada test_collection:

database = client.database
collection = database['test_collection']

Tip

Si el nombre de la colección proporcionado aún no existe en la base de datos, MongoDB crea implícitamente la colección cuando se insertan datos en ella por primera vez.

Si bien el driver de Ruby para MongoDB no tiene un método create_collection directo, puedes usar el método create para crear una colección con opciones específicas.

El siguiente ejemplo crea una colección llamada example_collection con opciones específicas:

database = client.database
database[:example_collection].create(capped: true, size: 1024)

Puedes especificar opciones de colección como el tamaño máximo, las reglas de validación de documentos y otras pasando estos como argumentos al método de comando con el comando crear. Para obtener una lista completa de parámetros opcionales, consulta la documentación de MongoDB sobre el comando crear.

Puedes consultar query una lista de colecciones en una base de datos llamando al método collections. Este método devuelve un arreglo de objetos de colección en la base de datos.

El siguiente ejemplo invoca el método collections e itera sobre el arreglo para imprimir los resultados:

database = client.database
collection_list = database.collections
collection_list.each do |collection|
puts collection.name
end

Para hacer un query para solo los nombres de las colecciones en la base de datos, lleva a cabo el método collection_names de la siguiente manera:

database = client.database
collection_names = database.collection_names
collection_names.each do |name|
puts name
end

Nota

La lista de objetos database.collections proporciona información más detallada (es decir, cada objeto de la colección puede consultarse más a fondo para obtener metadatos), mientras que database.collection_names simplemente enumera los nombres de la colección.

Puedes borrar una colección de la base de datos utilizando el método drop.

El siguiente ejemplo elimina la colección test_collection:

database = client.database
collection = database[:test_collection]
collection.drop

Advertencia

Eliminar una colección borra todos los datos de la colección

Borrar una colección de la base de datos borra permanentemente todos los documentos y todos los índices dentro de esa colección.

Descartar una colección solo si los datos que contiene ya no son necesarios.

Puedes borrar una base de datos de tu implementación de MongoDB utilizando el método drop en una instancia de base de datos.

El siguiente ejemplo borra la base de datos test_database:

client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test_database')
database = client.database
database.drop

Advertencia

Borrar una base de datos borra todos los datos de la base de datos.

Borrar una base de datos borra permanentemente todas las colecciones, documentos e índices dentro de esa base de datos.

Descarta una base de datos solo si ya no necesitas sus datos.

Puedes controlar cómo el driver direcciona las operaciones de lectura configurando una preferencia de lectura. También puede controlar las opciones de cómo el driver espera la confirmación de las operaciones de lectura y escritura en un set de réplicas configurando un nivel de consistencia de lectura y un nivel de confirmación de escritura (write concern).

Por defecto, las bases de datos heredan estas configuraciones de la instancia Mongo::Client, y las colecciones las heredan de la base de datos. Sin embargo, puedes cambiar estos ajustes en tu base de datos o colección utilizando uno de los siguientes métodos:

  • database.withObtiene la base de datos y aplica la nueva preferencia de lectura, el nuevo nivel de consistencia de lectura y el nuevo nivel de confirmación de escritura (write concern).

  • collection.with: Obtiene la colección y aplica la nueva preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern).

Para cambiar la configuración de lectura o escritura con los métodos anteriores, llama al método e indica la nueva preferencia de lectura, nivel de consistencia de lectura o nivel de confirmación de escritura (write concern).

El siguiente ejemplo muestra cómo cambiar la preferencia de lectura, el nivel de consistencia de lectura, y la preferencia de escritura de una base de datos llamada test-database con el método database.with:

database_with_settings = client.use('test_database').with(
read: { mode: :secondary },
read_concern: { level: :local },
write: { w: :majority }
)

El siguiente ejemplo muestra cómo cambiar la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) de una colección:

collection_with_settings = client[:test_collection].with(
read: { mode: :secondary },
read_concern: { level: :local },
write: { w: :majority }
)

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:

En MongoDB Server, puedes aplicar etiquetas de clave-valor a los miembros del set de réplicas según cualquier criterio que elijas. A continuación, puedes usar esas etiquetas para dirigir una operación de lectura a uno o más nodos.

De forma predeterminada, el driver Ruby de MongoDB selecciona a los miembros primarios para las operaciones de lectura. Puede modificar este comportamiento estableciendo las preferencias de lectura y, opcionalmente, los conjuntos de etiquetas.

En el siguiente ejemplo de código, el conjunto de etiquetas pasado al parámetro :read le indica al driver de Ruby que prefiera lecturas desde el centro de datos de Nueva York ('dc':'ny') y que recurra al centro de datos de San Francisco ('dc':'sf'):

client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'test', read: {
mode: :secondary,
tag_sets: [{'dc' => 'ny'}, {'dc' => 'sf'}]
})
database = client.database
collection = database[:example_collection]

Para obtener más información sobre los sets de réplicas, consulta la página Miembros de conjuntos de réplicas en el manual del MongoDB Server.

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 local_threshold al constructor Mongo::Client.

El siguiente ejemplo especifica un umbral local de 35 milisegundos:

client = Mongo::Client.new(
['IP_ADDRESS_001:27017'],
database: 'test_database',
read: { mode: :secondary_preferred },
local_threshold: 35
)
database = client.database
collection = database[:example_collection]
result = collection.find({}).first
puts result

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

Nota

El driver Ruby ignora el valor de local_threshold cuando se comunica con un set de réplicas a través de una instancia mongos. En este caso, usa la opción de línea de comandos localThreshold.

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