Overview
En esta guía, puedes aprender sobre el del controlador de Rust asíncronas y síncronas APIs. Esta guía explica cómo habilitar las API disponibles y estructurar tu código para usar cada una de ellas.
El driver Rust admite tokio y async-std, dos cajas de tiempo de ejecución asíncronos populares. Por defecto, el driver utiliza el entorno asíncrono tokio, pero puedes seleccionar un entorno específico añadiendo flags de funcionalidad a la dependencia mongodb en tu archivo Cargo.toml.
El driver también incluye una API síncrona para casos de uso que requieren bloqueo o cuando el paralelismo no es necesario. Puedes seleccionar la API síncrona añadiendo banderas de funcionalidad a la dependencia mongodb en tu archivo Cargo.toml.
Configura el entorno de ejecución asincrónico
El driver utiliza por defecto el tiempo de ejecución tokio. Puedes elegir explícitamente un tiempo de ejecución añadiendo los indicadores de funcionalidad "tokio-runtime" o "async-std-runtime" a la dependencia mongodb.
Selecciona entre las siguientes pestañas para ver cómo agregar flags de funcionalidades para cada caja correspondiente:
[dependencies.mongodb] version = "2.8.2" features = ["tokio-runtime"]
[dependencies.mongodb] version = "2.8.2" default-features = false features = ["async-std"]
Para obtener más información sobre la instalación del driver y la adición de indicadores de funcionalidad, consulte la Paso de descargar e instalación de la guía de inicio rápido.
Ejemplo de Runtime de Tokio
El siguiente código utiliza el módulo task de la caja tokio para crear tareas independientes y concurrentes para múltiples operaciones de datos:
let client = Client::with_uri_str("<connection string>").await?; let some_data = doc! { "title": "1984", "author": "George Orwell" }; for i in 0..5 { let client_ref = client.clone(); let somedata_ref = some_data.clone(); task::spawn(async move { let collection = client_ref .database("items") .collection::<Document>(&format!("coll{}", i)); collection.insert_one(somedata_ref, None).await }); }
Configura la API síncrona
El controlador también proporciona una API síncrona y bloqueante. Para usar la API síncrona, añade ya sea el indicador de funcionalidad "sync" o "tokio-sync" a la dependencia mongodb.
Selecciona entre las siguientes pestañas para ver cómo agregar flags de funcionalidades para cada caja correspondiente:
[dependencies.mongodb] version = "2.8.2" default-features = false features = ["sync"]
[dependencies.mongodb] version = "2.8.2" default-features = false features = ["tokio-sync"]
Ejemplo de código síncrono
Al utilizar la API síncrona, use los tipos del módulo mongodb::sync para ejecutar operaciones. El siguiente código utiliza el módulo sync para insertar datos en una colección mediante la API síncrona. Cuando el método insert_one se ejecuta dentro del bucle for, el controlador espera a que cada solicitud se complete antes de continuar.
use mongodb::sync::Client; fn main() { let client = Client::with_uri_str("<connection string>")?; let some_data = doc! { "title": "1984", "author": "George Orwell" }; for i in 0..5 { let client_ref = client.clone(); let somedata_ref = some_data.clone(); let collection = client_ref .database("items") .collection::<Document>(&format!("coll{}", i)); collection.insert_one(somedata_ref, None); } }
Utiliza tanto APIs asíncronas como síncronas
Puede usar tanto APIs asincrónicas como sincrónicas en la misma aplicación. Por ejemplo, para habilitar ambos entornos de ejecución tokio, puede agregar la dependencia tokio a su lista de dependencias y agregar la bandera "tokio-sync" a la dependencia mongodb:
[dependencies] futures = "0.3.28" tokio = {version = "1.32.0", features = ["full"]} [dependencies.mongodb] version = "2.8.2" features = ["tokio-sync"]
Información Adicional
Para obtener más información sobre los conceptos de esta guía, consulta las siguientes páginas:
Documentación de la API
Para obtener más información sobre los métodos y tipos mencionados en esta guía, vea la siguiente documentación de la API: