Overview
En esta guía, aprenderás a utilizar el driver Rust para acceder y gestionar 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 aprender más sobre el formato de datos de los documentos, se puede consultar Documentos en el manual del servidor.
Acceder a una base de datos
You can access a database by retrieving a Database instance from your client. You can use a Database instance to perform database-level operations and access collections that the database contains.
Call one of the following methods on a Client instance to create a Database:
database(): recuperar una base de datos por su nombre
database_with_options(): establecer opciones (DatabaseOptions) al recuperar una base de datos por su nombre
default_database(): access the default database specified for your
Clientinstance
Tip
Para especificar la base de datos por defecto para su cliente, establezca el campo default_database de su estructura ClientOptions. Si no configuras este campo, el controlador obtiene la base de datos predeterminada del componente defaultauthdb de tu cadena de conexión.
Si se pasan el nombre de una base de datos inexistente a los métodos database() o database_with_options(), el controlador aún devuelve una instancia de Database. Cuando insertas cualquier dato en una colección de esta base de datos, el servidor lo 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
To see a list of your deployment's databases, call the list_database_names() method on your Client instance. This method returns a Vec<String> type, a vector containing the database names as strings.
To see detailed information about each database, call the list_databases() method on your Client instance. This method returns a Vec<DatabaseSpecification> type. The DatabaseSpecification type contains fields describing each database, such as its size and whether it contains data.
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(doc! {}, None).await?; println!("{:?}", db_list);
Descartar una base de datos
Dropping a database permanently deletes all the data in that database's collections. To drop a database, call the drop() method on your Database instance. The following code shows how to drop a database referenced by the db variable:
db.drop(None).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
You can access a collection by retrieving a Collection instance from your database. You can use a Collection instance to perform data operations, create aggregations, and manage indexes. Call one of the following methods on a Database instance to retrieve a Collection:
collection(): recuperar una colección por su nombre
collection_with_options(): configurer les options (CollectionOptions) lors de l'accès à une colección par son nombre
Si pasas el nombre de una colección inexistente a los métodos collection() o collection_with_options(), el controlador aún devuelve una instancia Collection. Cuando insertas cualquier dato en esta colección, el servidor lo 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 variabledbEstablece una preferencia de guardar en la colección del 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 parametrizas tu instancia de Collection, el compilador inferirá el tipo genérico cuando realices 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 driver de Rust, consulte la guía sobre modelado de datos y serialización.
Crear una colección
You can explicitly create a collection by calling the create_collection() method on a Database instance. This method takes the collection name and an optional CreateCollectionOptions type as parameters. You can use a Collection instance to perform data operations, create aggregations, and manage indexes.
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", None).await?;
Al crear una colección, puedes implementar validación de esquema para mantener un esquema de documentos coherente y controlar si alguna operación de escritura puede pasar por alto las reglas de validación. Para aprender cómo habilitar esta funcionalidad, consulta la guía sobre Validación de esquema.
Listar colecciones
To see the names of the collections in a database, call the list_collection_names() method on your Database instance. This method returns a Vec<String> type, a vector containing the collection names as strings.
To see detailed information about each collection, call the list_collections() method on your Database instance. This method returns a Vec<CollectionSpecification> type. The CollectionSpecification type contains fields describing each collection, such as its type and settings.
El siguiente ejemplo muestra cómo imprimir los nombres de las colecciones en una base de datos referenciadas por la variable db utilizando el método list_collection_names():
let coll_list = db.list_collection_names(doc! {}).await?; println!("{:?}", coll_list);
Descarta una colección
Dropping a collection permanently deletes all the data in that collection. To drop a collection, call the drop() method on your Collection instance. The following code shows how to drop a collection referenced by the my_coll variable:
my_coll.drop(None).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