Overview
このガイドでは、 Scalaドライバーを使用して、コレクション全体で指定されたフィールドの個別の値を取得する方法を学習できます。
コレクション内では、異なるドキュメントによって単一のフィールドの異なる値が含まれる場合があります。 例、restaurantsコレクション内の 1 つのドキュメントの borough 値は "Manhattan" で、別のドキュメントの borough 値は "Queens" です。 Scalaドライバーを使用すると、コレクション内の複数のドキュメントにわたってフィールドに含まれるすべての一意の値を検索できます。
サンプル データ
このガイドの例では、restaurants sample_restaurantsAtlasサンプルデータセット の データベースの コレクションを使用します。Scalaアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続する MongoClient を作成し、database 変数と collection 変数に次の値を割り当てます。
val database: MongoDatabase = client.getDatabase("sample_restaurants") val collection: MongoCollection[Document] = database.getCollection("restaurants")
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。
Retrieve Distinct Values
指定されたフィールドの個別の値を検索するには、distinct() メソッドを呼び出し、個別の値を検索するフィールドの名前を渡します。
コレクション全体で値を取得
次の例では、 restaurantsコレクション内のboroughフィールドの個別の値を取得します。
collection.distinct("borough") .subscribe((value: String) => println(value), (e: Throwable) => println(s"There was an error: $e"))
Bronx Brooklyn Manhattan Missing Queens Staten Island
この操作はDistinctObservableクラスのインスタンスを返します。これを反復処理して、個別の boroughフィールド値にアクセスできます。 boroughフィールドでは複数のドキュメントが同じ値になっていますが、各値は結果に 1 回だけ表示されます。
指定されたドキュメント全体で値を取得
distinct()メソッドにクエリフィルターを提供すると、コレクション内のドキュメントのサブセット内で個別のフィールド値を検索できます。クエリフィルターは、操作内のドキュメントを一致させるために使用される検索条件を指定する式です。 クエリフィルターの作成の詳細については、 クエリの指定ガイドを参照してください。
次の例では、 cuisineフィールドの値が"Italian"であるすべてのドキュメントのboroughフィールドの個別の値を取得します。
val filter = equal("cuisine", "Italian") collection.distinct("borough", filter) .subscribe((value: String) => println(value), (e: Throwable) => println(s"There was an error: $e"))
Bronx Brooklyn Manhattan Queens Staten Island
個別の動作の変更
DistinctObservableクラスによって提供されるメソッドを連鎖させることで、distinct() メソッドの動作を変更できます。 次の表では、これらの方法の一部について説明しています。
方式 | 説明 |
|---|---|
| Sets the collation to use for the operation. Parameter Type: Collation |
| Attaches a comment to the operation. Parameter Type: BsonValue or String |
| Retrieves only the first distinct field value. |
次の例では、 boroughフィールド値が "Bronx" で、かつ cuisineフィールド値が "Pizza" であるすべてのドキュメントの nameフィールドの個別の値を取得します。 次に、comment() メソッドを distinct() に連鎖させて、操作にコメントを追加します。
val filter = and(equal("borough", "Bronx"), equal("cuisine", "Pizza")) collection.distinct("name", filter) .comment("Bronx Pizza restaurants") .subscribe((value: String) => println(value), (e: Throwable) => println(s"There was an error: $e"))
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant Amici Pizza And Pasta Angie'S Cafe Pizza ...
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。