Overview
En esta guía, puede aprender a usar el controlador Rust para acceder y administrar bases de datos y colecciones de MongoDB.
MongoDB organiza los datos en una estructura jerárquica. Una implementación de MongoDB contiene una o más bases de datos, y cada base de datos contiene una o más colecciones. En cada colección, MongoDB almacena datos como documentos que contienen pares de campo y valor.
Para obtener más información sobre el formato de datos del documento, consulte Documentos en el manual del servidor.
Acceder a una base de datos
Puede acceder a una base de datos recuperando una base de datos instancia de su cliente. Puede utilizar una Database instancia para realizar operaciones a nivel de base de datos y acceder a colecciones que contiene la base de datos.
Llame a uno de los siguientes métodos en una instancia de Cliente para crear Database un:
database(): recupera una base de datos por su nombre
database_with_options(): establece opciones (DatabaseOptions) mientras recupera una base de datos por sunombre
default_database(): accede a la base de datos por defecto especificada para tu instancia
Client
Tip
Para especificar la base de datos predeterminada para su cliente, configure el campo default_database de su estructura ClientOptions. Si no configura este campo, el controlador obtendrá la base de datos predeterminada del componente defaultauthdb de su cadena de conexión.
Si se pasa el nombre de una base de datos inexistente a los métodos database() o database_with_options(), el controlador devuelve una instancia Database. Al insertar datos en una colección de esta base de datos, el servidor los crea.
El siguiente ejemplo utiliza el método database() para acceder a una base de datos llamada test_db:
let db = client.database("test_db");
Listar bases de datos
Para ver una lista de las bases de datos de su implementación, llame al método list_database_names() en su Client instancia. Este método devuelve un Vec<String> tipo, un vector que contiene los nombres de las bases de datos como cadenas.
Para ver información detallada sobre cada base de datos, llame al método list_databases() en su Client instancia. Este método devuelve un Vec<DatabaseSpecification> tipo. El tipo DatabaseSpecification contiene campos que describen cada base de datos, como su tamaño y si contiene datos.
El siguiente ejemplo muestra cómo imprimir una lista de bases de datos utilizando el método list_database_names():
let db_list = client.list_database_names().await?; println!("{:?}", db_list);
["admin", "local", "test_db", ...]
Descartar una base de datos
Eliminar una base de datos elimina permanentemente todos los datos de sus colecciones. Para eliminar una base de datos, llame al método drop() en su Database instancia. El siguiente código muestra cómo eliminar una base de datos referenciada por la db variable:
db.drop().await?;
Advertencia
Cuando eliminas una base de datos, se borran datos
Al eliminar una base de datos, se borran de forma permanente todos los documentos de las colecciones de la base de datos y todos los índices de esas colecciones. Después de descartar una base de datos, no puedes acceder ni restaurar ninguno de sus datos.
Acceder a una colección
Puede acceder a una colección recuperando una instancia de Collection de su base de datos. Puede usar una Collection instancia para realizar operaciones con datos, crear agregaciones y administrar índices. Llame a uno de los siguientes métodos en una Database instancia para recuperar una Collection instancia:
collection_with_options(): establece opciones (CollectionOptions) al acceder a una colección por su nombre
Si pasa el nombre de una colección inexistente a los collection() collection_with_options() métodos o, el controlador devuelve una Collection instancia. Al insertar datos en esta colección, el servidor la crea. Para aprender a crear una colección explícitamente, consulte la sección "Crear una colección" de esta guía.
Este ejemplo utiliza el método collection_with_options() para realizar las siguientes acciones:
Acceda a una colección llamada
coll_xyzdesde una base de datos referenciada por la variabledbEstablezca una preferencia de escritura en la colección en el tipo
CollectionOptions
let wc = WriteConcern::builder().journal(true).build(); let coll_opts = CollectionOptions::builder().write_concern(wc).build(); let my_coll: Collection<Document> = db.collection_with_options("coll_xyz", coll_opts);
Para obtener más información sobre los niveles de confirmación de escritura (write concerns), consulta Nivel de confirmación de escritura (write concern) en el manual del servidor.
Parametrización de colecciones
Debes parametrizar tu instancia de Collection especificando en qué tipo de dato quieres serializar los datos de la colección. Cuando llamas a un método en una instancia Collection que está parametrizada con un tipo específico, el método acepta o devuelve instancias de este tipo.
Nota
Si no parametriza su instancia Collection, el compilador infiere el tipo genérico cuando realiza una operación CRUD con un tipo de datos especificado en el mismo ámbito.
El siguiente ejemplo muestra formas equivalentes de parametrizar una colección con el tipo Document:
let my_coll: Collection<Document> = client.database("test_db").collection("coll_xyz"); let my_coll = client.database("test_db").collection::<Document>("coll_xyz");
Tip
Te recomendamos que parametrices tu instancia de Collection con un tipo personalizado que modele tus datos en vez del tipo Document. Puedes evitar la serialización y validación repetitivas si defines un tipo que modele tus datos específicos.
Para obtener más información sobre la serialización en el controlador Rust, consulte la guía en Modelado y serialización de datos.
Crear una colección
Puedes crear una colección explícitamente llamando al método create_collection() en una Database instancia. Este método toma el nombre de la colección como parámetro. Puedes usar una Collection instancia para realizar operaciones con datos, crear agregaciones y administrar índices.
El siguiente código muestra cómo crear una colección llamada coll_abc dentro de una base de datos referenciada por la variable db:
db.create_collection("coll_abc").await?;
Al crear una colección, puede implementar la validación de esquema para mantener un esquema de documento coherente y controlar si las operaciones de escritura pueden omitir las reglas de validación. Para saber cómo habilitar esta función, consulte la guía sobre Validación de Esquema.
Listar colecciones
Para ver los nombres de las colecciones en una base de datos, llame al método list_collection_names() en su Database instancia. Este método devuelve un Vec<String> tipo, un vector que contiene los nombres de las colecciones como cadenas.
Para ver información detallada sobre cada colección, llame al método list_collections() en su Database instancia. Este método devuelve un Vec<CollectionSpecification> tipo. El tipo CollectionSpecification contiene campos que describen cada colección, como su tipo y configuración.
El siguiente ejemplo muestra cómo imprimir los nombres de las colecciones en una base de datos referenciada por la variable db utilizando el método list_collection_names():
let coll_list = db.list_collection_names().await?; println!("{:?}", coll_list);
["my_coll", "coll_xyz", ...]
Descarta una colección
Eliminar una colección elimina permanentemente todos sus datos. Para eliminar una colección, llame al método drop() en su Collection instancia. El siguiente código muestra cómo eliminar una colección referenciada por la my_coll variable:
my_coll.drop().await?;
Advertencia
Al descartar una colección, se borran datos
Al borrar una colección de tu base de datos, se eliminan permanentemente todos los documentos dentro de esa colección y todos los índices de esa colección. Después de que descartes una colección, no puedes acceder ni hacer la restauración de ninguno de sus datos.
Información Adicional
Para más información sobre los conceptos de esta guía, consulta la siguiente documentación:
Guía para Insertar documentos
Bases de datos y colecciones en el manual del servidor
Documentos en el manual del servidor