Docs Menu
Docs Home
/ / /
Kotlin コルーチン
/

フィールドの個別の値を取得

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 ドキュメント

  • ドット表記サーバー マニュアル入力

戻る

ドキュメントをカウント