Overview
このガイドでは、 Rustドライバーを使用して、コレクション全体で指定されたフィールドの個別の値を検索することを学ぶことができます。
コレクション内では、ドキュメントには単一のフィールドに異なる値が含まれる場合があります。例、restaurantsコレクション内の 1 つのドキュメントの borough 値は "Manhattan" で、別のドキュメントの borough 値は "Queens" です。Rustドライバーを使用して、restaurantsコレクション内のすべてのドキュメントにわたって boroughフィールドから "Manhattan"、"Queens"、およびその他のすべての一意の値を取得できます。
サンプル データ
このガイドの例では、Atlas のサンプルデータセットから、sample_restaurantsデータベースのrestaurantsコレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDBを使い始めるガイド を参照してください 。
restaurantsコレクション内のドキュメントには、Document 型またはカスタムデータ型のインスタンスとしてアクセスできます。コレクションのデータを表すデータ型を指定するには、<T> 型パラメータを次のいずれかの値に置き換えます。
<Document>:コレクションドキュメントをBSONドキュメントとして表現します<Restaurant>: コード例で定義されているRestaurant構造体のインスタンスとしてコレクションドキュメントを表します
Retrieve Distinct Values
指定されたフィールドの個別の値を検索するには、Collection インスタンスで distinct() メソッドを呼び出し、個別の値を見つけたいフィールドの名前を渡します。
distinct() メソッドは、Bson 値のベクトルである Vec<Bson>オブジェクトとして個別の値のリストを返します。
コレクション全体で値を取得
次の例では、 restaurantsコレクション内の boroughフィールドの個別の値を取得します。
各実行時に対応するコードを表示するには、 AsynchronousタブまたはSynchronousタブを選択します。
let boroughs = my_coll.distinct("borough", None).await?; println!("List of field values for 'borough':"); for b in boroughs { println!("{:?}", b); }
List of field values for 'borough': String("Bronx") String("Brooklyn") String("Manhattan") String("Missing") String("Queens") String("Staten Island")
let boroughs = my_coll.distinct("borough", None).run()?; println!("List of field values for 'borough':"); for b in boroughs { println!("{:?}", b); }
List of field values for 'borough': String("Bronx") String("Brooklyn") String("Manhattan") String("Missing") String("Queens") String("Staten Island")
この操作では、個別の boroughフィールド値をそれぞれ保存するベクトルが返されます。boroughフィールドでは複数のドキュメントが同じ値になっていますが、各値は結果に 1 回だけ表示されます。
指定されたドキュメント全体で値を取得
distinct() メソッドにクエリフィルターを提供すると、コレクション内のドキュメントのサブセット全体で個別のフィールド値を検索できます。クエリフィルターは、操作内のドキュメントを一致させるために使用される検索条件を指定する式です。例、distinct() メソッドを使用すると、一致したドキュメントのサブセットのみから個別のフィールド値を検索できます。
Tip
クエリフィルターの作成の詳細については、クエリの指定ガイドを参照してください。
次の例では、cuisineフィールドの値が "Turkish" であるすべてのドキュメントの boroughフィールドの個別の値を取得します。
各実行時に対応するコードを表示するには、 AsynchronousタブまたはSynchronousタブを選択します。
let filter = doc! { "cuisine": "Turkish" }; let boroughs = my_coll.distinct("borough", filter).await?; println!("List of field values for 'borough':"); for b in boroughs { println!("{:?}", b); }
List of field values for 'borough': String("Brooklyn") String("Manhattan") String("Queens") String("Staten Island")
let filter = doc! { "cuisine": "Turkish" }; let boroughs = my_coll.distinct("borough", filter).run()?; println!("List of field values for 'borough':"); for b in boroughs { println!("{:?}", b); }
List of field values for 'borough': String("Brooklyn") String("Manhattan") String("Queens") String("Staten Island")
個別の動作の変更
distinct() メソッドの動作を変更するには、await または run() メソッドを呼び出す前に、1 つ以上のオプション メソッドを count_documents() 呼び出しに連結します。次の表では、個別の操作をカスタマイズするために設定できるオプションについて説明します。
オプション | 説明 |
|---|---|
| 操作に使用する 照合 |
| 操作に使用するインデックス。 |
| 操作に添付するコメント。 |
| 操作を実行できる最大時間。 |
| 操作に使用する読み取り保証 (read concern)。 |
| 操作に使用する読み込み設定 (read preference) とタグを指定します。 |
API ドキュメント
distinct() メソッドの詳細については、API ドキュメントをご覧ください。