ドキュメントの検索
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 ドキュメントを参照してください。