フィールドの個別の値を取得
MongoCollection
オブジェクトで distinct()
メソッドを呼び出すと、コレクション全体のフィールドの個別の値のリストを取得できます。 最初のパラメーターとしてドキュメント フィールド名を渡し、結果をキャストするクラスを type パラメーターとして渡します。
次のスニペットは、 sample_mflix
サンプル データベース内のmovies
コレクションを使用するdistinct()
メソッドを示しています。 ドキュメントは、次の Kotlin データ クラスでモデル化されます。
data class Movie( val type: String, val languages: List<String>, val countries: List<String>, val awards: Awards){ data class Awards(val wins: Int) }
次のメソッド呼び出しは、 movies
コレクション内のcountries
フィールドのそれぞれの値を返します。
collection.distinct<String>(Movie::countries.name)
You can specify a field on the document or one within an embedded document using dot notation. 次のメソッド呼び出しは、 awards
埋め込みドキュメントのwins
フィールドのそれぞれの値を返します。
collection.distinct<Int>("${Movie::awards.name}.${Movie.Awards::wins.name}")
次のように、クエリフィルターを 2 番目のパラメーターとして使用して、MongoDB インスタンスが個別の値を取得するドキュメントのセットを制限することもできます。
collection.distinct<String>(Movie::type.name, Filters.eq(Movie::languages.name, "French"))
distinct()
メソッドは、結果にアクセスし、整理し、走査するためのメソッドを含むDistinctFlow
クラスを実装するオブジェクトを返します。 DistinctFlow
は Kotlin コルーチン ライブラリからFlow
インターフェースに委任し、 first()
やfirstOrNull()
などのメソッドへのアクセスを許可します。
詳しくは、フローからデータにアクセスするに関するガイドをご覧ください。
例
次の例では、 movies
コレクションからyear
ドキュメント フィールドの個別の値のリストを取得します。 クエリフィルターを使用して、 directors
配列の値の 1 つとして "Charl Atlas" を含む映画を照合します。
例を実行すると、カーネル フランクラインが監督として含まれていたすべての映画について、それぞれ年ごとに報告する出力が表示されます。
注意
この例では、接続 URI を使用して MongoDB のインスタンスに接続します。 MongoDB インスタンスへの接続の詳細については、接続ガイド を参照してください。
import com.mongodb.MongoException import com.mongodb.client.model.Filters import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking data class Movie(val year: Int, val directors: List<String>) fun main() = runBlocking { // Replace the uri string with your MongoDB deployment's connection string val uri = "<connection string uri>" val mongoClient = MongoClient.create(uri) val database = mongoClient.getDatabase("sample_mflix") val collection = database.getCollection<Movie>("movies") try { val resultsFlow = collection.distinct<Int>( Movie::year.name, Filters.eq(Movie::directors.name, "Carl Franklin") ) resultsFlow.collect { println(it) } } catch (e: MongoException) { System.err.println("An error occurred: $e") } mongoClient.close() }
1992 1995 1998 ...
このページで言及されているクラスとメソッドについての追加情報については、次のリソースを参照してください。
distinct() APIドキュメント
distinctFlow API ドキュメント
ドット表記サーバー マニュアル入力