Overview
コレクション内では、異なるドキュメントによって、単一のフィールドの異なる値が含まれる場合があります。 たとえば、 restaurantコレクション内の 1 つのドキュメントのborough値は"Manhattan"で、別のドキュメントのborough値は"Queens"です。 Kotlin Sync ドライバーを使用すると、コレクション内の複数のドキュメントにわたってフィールドに含まれるすべての個別の値を検索できます。
サンプル データ
このガイドの例では、 Atlas サンプル データセットのsample_restaurantsデータベースのrestaurantsコレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 Atlas を使い始める 」ガイドを参照してください。
次の Kotlin データ クラスは、このコレクション内のドキュメントをモデル化します。
data class Restaurant( val name: String, val borough: String, val cuisine: String )
distinct() 方式
指定したフィールドの個別の値を検索するには、 distinct()メソッドを呼び出し、個別の値を検索するフィールドの名前を渡します。
コレクション全体で個別の値を取得
次の例では、 restaurantsコレクション内のboroughフィールドの個別の値を取得します。
val results = collection.distinct<String>(Restaurant::borough.name) results.forEach { result -> println(result) }
Bronx Brooklyn Manhattan Missing Queens Staten Island
結果には、コレクション内のすべてのドキュメントにわたってboroughフィールドに表示されるすべての個別の値が表示されます。 boroughフィールドの値は複数のドキュメントで同じですが、各値は結果に 1 回だけ表示されます。
指定されたドキュメント全体で個別の値を取得
distinct()メソッドにクエリフィルターを提供すると、コレクション内のドキュメントのサブセット全体で個別のフィールド値を検索できます。 クエリフィルター は、 操作内のドキュメントを照合するために使用される検索条件を指定する 式 です。 クエリフィルターの作成の詳細については、「 クエリの指定 」を参照してください。
次の例では、 cuisineフィールドの値が"Italian"であるすべてのドキュメントのboroughフィールドの個別の値を取得します。
val results = collection.distinct<String>( Restaurant::borough.name, eq(Restaurant::cuisine.name, "Italian") ) results.forEach { result -> println(result) }
Bronx Brooklyn Manhattan Queens Staten Island
個別の動作の変更
distinct()メソッドは、 distinct()メソッド呼び出しにメソッドを連鎖させることで変更できます。 オプションを指定しない場合、ドライバーは操作をカスタマイズしません。
次の表では、 distinct()操作をカスタマイズするために使用できるいくつかの方法について説明します。
方式 | 説明 |
|---|---|
| Sets the number of documents to return per batch. |
| Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. |
| Specifies a comment to attach to the operation. |
| Sets the query filter to apply to the query. |
| Performs the given action on each element returned by the distinct() operation. |
distinct() メソッドを変更するために使用できるメソッドの完全なリストについては、 DistinctIterable APIドキュメントを参照してください。
次の例では、 boroughフィールド値が"Bronx"で、かつcuisineフィールド値が"Pizza"であるすべてのドキュメントのnameフィールドの個別の値を取得します。 また、 commentオプションを使用して操作にコメントを追加します。
val results = collection.distinct<String>( Restaurant::name.name, and( eq(Restaurant::borough.name, "Bronx"), eq(Restaurant::cuisine.name, "Pizza") ) ).comment("Bronx pizza restaurants") results.forEach { result -> println(result) }
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant ...
詳細情報
コマンドの詳細については、 MongoDB Serverマニュアルの 個別の ガイド を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。