個別のフィールド値の取得
Overview
このガイドでは、 Scalaドライバーを使用して、コレクション全体で指定されたフィールドの個別の値を取得する方法を学習できます。
コレクション内では、異なるドキュメントによって単一のフィールドの異なる値が含まれる場合があります。例、restaurants
コレクション内の 1 つのドキュメントの borough
値は "Manhattan"
で、別のドキュメントの borough
値は "Queens"
です。 Scalaドライバーを使用すると、コレクション内の複数のドキュメントにわたってフィールドに含まれるすべての一意の値を検索できます。
サンプル データ
このガイドの例では、restaurants
sample_restaurants
Atlasサンプルデータセット の データベースの コレクションを使用します。 Scalaアプリケーションからこのコレクションにアクセスするには、AtlasMongoClient
クラスターに接続する を作成し、 変数と 変数に次の値を割り当てます。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 |
| Sets the maximum amount of time that the operation can run. Parameter Type: Duration |
| 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 ドキュメントを参照してください。