MongoCollection オブジェクトの find() メソッドと first() メソッドを連結することで、コレクション内の 1 つのドキュメントを検索できます。find() メソッドにクエリフィルターを渡すと、コレクション内のフィルターに一致するドキュメントを検索して返すことができます。フィルターを含めない場合、MongoDB はコレクション内のすべてのドキュメントを返します。
Kotlin ドライバーを使用して MongoDB をクエリする方法の詳細については、ドキュメントのクエリに関するガイドをご覧ください。
また、一致したドキュメントを指定された順序で整理する sort() や、返されたドキュメントに含まれるフィールドを構成する projection() など、他のメソッドを find() メソッドに連結することもできます。
sort()メソッドの詳細については、 ソート に関するガイドをご覧ください。 projection()メソッドの詳細については、 プロジェクション に関するガイドをご覧ください
find() メソッドは、結果にアクセスし、整理し、走査するためのいくつかのメソッドを提供するクラスである、FindFlow のインスタンスを返します。
FindFlow は、 Kotlin コルーチン ライブラリから削除インターフェースFlowからもメソッドを取得します( first()やfirstOrNull()など)。 firstOrNull()nullメソッドは検索された結果から最初のドキュメントを返します。結果がない場合は メソッドを返します。first()メソッドは最初のドキュメントを返すか、クエリに一致するドキュメントがない場合はNoSuchElementException例外をスローします。
Kotlin ドライバーを使用してフローからデータにアクセスする方法の詳細については、「フローからのデータへのアクセス 」に関するガイドを参照してください。
例
次のスニペットは、movies コレクションから 1 つのドキュメントを検索します。次のオブジェクトとメソッドを使用します。
find()メソッドに渡されるクエリフィルター。eqフィルターは、タイトルが"The Room"テキストと完全に一致する映画のみに一致します。一致したドキュメントを評価の降順で整理するソート。これにより、クエリが複数のドキュメントに一致した場合、返されるドキュメントが最も評価の高いドキュメントになります。
titleフィールドとimdbフィールドに オブジェクトを含み、ヘルパー メソッドexcludeId()を使用して_idフィールドを除外するプロジェクション。
注意
この例では、接続 URI を使用して MongoDB のインスタンスに接続します。 MongoDB インスタンスへの接続の詳細については、接続ガイド を参照してください。
import com.mongodb.client.model.Filters.eq import com.mongodb.client.model.Filters.lt import com.mongodb.client.model.Projections import com.mongodb.client.model.Sorts import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.runBlocking import usageExamples.find.Results data class Movie(val title: String, val runtime: Int, val imdb: IMDB) { data class IMDB(val rating: Double) } data class Results(val title: String, val imdb: Movie.IMDB) 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") val projectionFields= Projections.fields( Projections.include(Movie::title.name, Movie::imdb.name), Projections.excludeId() ) val resultsFlow = collection.withDocumentClass<Results>() .find(eq(Movie::title.name, "The Room")) .projection(projectionFields) .sort(Sorts.descending("${Movie::imdb.name}.${Movie.IMDB::rating.name}")) .firstOrNull() if (resultsFlow == null) { println("No results found."); } else { println(resultsFlow) } mongoClient.close() }
このページで言及されているクラスとメソッドについて詳しくは、次の API ドキュメントを参照してください。