Overview
このガイドでは、Rust ドライバーの非同期API と同期API について学習できます。 このガイドでは、利用可能な API を有効にし、それぞれを使用するようにコードを構造化する方法について説明します。
Rust ドライバーは、2 つの一般的な非同期ランタイム クライアントである tokio
とasync-std
をサポートしています。 デフォルトでは、ドライバーはtokio
非同期ランタイムを使用しますが、 Cargo.toml
ファイルのmongodb
依存関係に機能フラグを追加することで、特定のランタイムを選択できます。
このドライバーには、ブロッキングが必要なユースケースや並列処理が必要ない場合のための同期 APIも含まれています。 同期 API を選択するには、 Cargo.toml
ファイルのmongodb
依存関係に機能フラグを追加します。
非同期ランタイムの設定
ドライバーはデフォルトでtokio
ランタイムを使用します。 "tokio-runtime"
または"async-std-runtime"
の機能フラグをmongodb
依存関係に追加することで、ランタイムを明示的に選択できます。
対応する各クローンに機能フラグを追加する方法を確認するには、次のタブから を選択します。
[dependencies.mongodb] version = "2.8.2" features = ["tokio-runtime"]
[dependencies.mongodb] version = "2.8.2" default-features = false features = ["async-std"]
ドライバーのインストールと機能フラグの追加の詳細については、クイック スタートの「 ダウンロードとインストール」のステップを参照してください。
topic ランタイムの例
次のコードでは、 tokio
crate のtask
モジュールを使用して、複数のデータ操作用に個別の同時タスクを作成します。
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 }); }
同期 API の設定
このドライバーは、ブロッキング、同期 API も提供します。 同期 API を使用するには、 "sync"
または"tokio-sync"
のいずれかの機能フラグをmongodb
依存関係に追加します。
対応する各クローンに機能フラグを追加する方法を確認するには、次のタブから を選択します。
[dependencies.mongodb] version = "2.8.2" default-features = false features = ["sync"]
[dependencies.mongodb] version = "2.8.2" default-features = false features = ["tokio-sync"]
同期コードの例
同期 API を使用する場合、操作を実行するにはmongodb::sync
モジュールのタイプを使用します。 次のコードでは、 sync
モジュールを使用して、同期 API を使用してコレクションにデータを挿入します。 insert_one
メソッドがfor
ループ内で実行される場合、ドライバーは続行する前に各リクエストが完了するのを待機します。
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); } }
非同期 API と同期 API の両方を使用する
同じアプリケーションで非同期 API と同期 API の両方を使用できます。 たとえば、両方のtokio
ランタイムを有効にするには、 tokio
依存関係を依存関係リストに追加し、 mongodb
依存関係に"tokio-sync"
フラグを追加します。
[dependencies] futures = "0.3.28" tokio = {version = "1.32.0", features = ["full"]} [dependencies.mongodb] version = "2.8.2" features = ["tokio-sync"]
詳細情報
このガイドの概念の詳細については、次のページを参照してください。
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。