Overview
En esta guía, puede aprender a utilizar bases de datos y colecciones de MongoDB con el controlador 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 dedocumentos en el manual de MongoDB Server.
Acceder a una base de datos
Acceda a una base de datos creando una Mongo::Client instancia 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
Acceda a una colección utilizando el método [] en una instancia de su 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.
Crear una colección
Si bien el controlador Ruby para MongoDB no tiene un método create_collection directo, puede 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.
Obtén una lista de colecciones
Puede consultar una lista de colecciones en una base de datos llamando al método collections. Este método devuelve una matriz de objetos de colección en la base de datos.
El siguiente ejemplo llama al método collections e itera sobre la matriz 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, se pueden realizar más consultas sobre metadatos en cada objeto de la colección), mientras que database.collection_names simplemente enumera los nombres de las colecciones.
Borrar una 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.
Borrar una base de datos
Puede eliminar una base de datos de su 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.
Elimine una base de datos solo si ya no necesita sus datos.
Configurar operaciones de lectura y escritura
Puede controlar cómo el controlador enruta las operaciones de lectura configurando una preferencia de lectura. También puede controlar cómo el controlador espera la confirmación de las operaciones de lectura y escritura en un conjunto de réplicas configurando una preocupación de lectura y una preocupación de escritura.
De forma predeterminada, las bases de datos heredan esta configuración de la instancia Mongo::Client y las colecciones la heredan de la base de datos. Sin embargo, puede cambiar esta configuración en su base de datos o colección mediante uno de los siguientes métodos:
database.with:Obtiene la base de datos y aplica la nueva preferencia de lectura, preocupación de lectura y preocupación de escritura.collection.with:Obtiene la colección y aplica la nueva preferencia de lectura, preocupación de lectura y preocupación de escritura.
Para cambiar la configuración de lectura o escritura con los métodos anteriores, llame al método y pase la nueva preferencia de lectura, preocupación de lectura o preocupación de escritura.
El siguiente ejemplo muestra cómo cambiar la preferencia de lectura, la preocupación 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, la preocupación de lectura y la preocupación de escritura 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, consulte las siguientes guías en el manual de MongoDB Server:
Conjuntos de etiquetas
En MongoDB Server, puede aplicar etiquetas clave-valor a los miembros del conjunto de réplicas según el criterio que elija. Después, puede usar esas etiquetas para seleccionar uno o más miembros para una operación de lectura.
De forma predeterminada, el controlador Ruby de MongoDB selecciona miembros principales para las operaciones de lectura. Puede modificar este comportamiento configurando 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 controlador Ruby que prefiera las lecturas del centro de datos de Nueva York ('dc':'ny') y 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 conjuntos de réplicas, consulte la página Miembros del conjunto de réplicas del manual de MongoDB Server.
Umbral local
Si varios miembros del conjunto de réplicas coinciden con la preferencia de lectura y los conjuntos de etiquetas que especifique, el controlador Ruby lee desde los miembros del conjunto de réplicas más cercanos de los clústeres fragmentados, elegidos de acuerdo con su tiempo de ping.
De forma predeterminada, el controlador utiliza solo los miembros cuyos tiempos de ping están a menos de 15 milisegundos del miembro más cercano para las consultas. Para distribuir las lecturas entre los miembros con latencias más altas, pase 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 controlador Ruby distribuye las lecturas entre los miembros coincidentes dentro de 35 milisegundos del tiempo de ping del miembro más cercano.
Nota
El controlador Ruby ignora el valor local_threshold al comunicarse con un conjunto de réplicas a través de una mongos instancia. En este caso, utilice la opción de línea de comandos localThreshold.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: