複数ドキュメントの検索
コレクション内の複数のドキュメントをクエリするには、 MongoCollection
オブジェクトで find()
メソッドを呼び出します。 find()
メソッドにクエリフィルターを渡すと、コレクション内のフィルターに一致するドキュメントを検索して返します。 フィルターを含めない場合、MongoDB はコレクション内のすべてのドキュメントを返します。
Kotlin ドライバーを使用して MongoDB をクエリする方法の詳細については、ドキュメントのクエリに関するガイドをご覧ください。
また、一致したドキュメントを指定された順序で整理するsort()
や、返されたドキュメントに含まれるフィールドを構成するprojection()
など、 find()
メソッドにメソッドを連結することもできます。
sort()
メソッドの詳細については、 ソート に関するガイドをご覧ください。 projection()
メソッドの詳細については、 プロジェクション に関するガイドをご覧ください
find()
メソッドは、結果にアクセスし、整理し、走査するためのいくつかのメソッドを提供するクラスである、FindFlow
のインスタンスを返します。
FindFlow
は、 Kotlin コルーチン ライブラリから 委任インターフェースFlow
からもメソッドを取得します。 collect()
メソッドを呼び出して、取得された結果を反復処理できます。 また、ターミナルfirstOrNull()
null
first()
メソッドを呼び出します。たとえば、 のように最初のドキュメントを返すか、結果がない場合は を返し、 を呼び出してコレクション内の最初のドキュメントを返します。クエリに一致するドキュメントがない場合、 first()
を呼び出すとNoSuchElementException
例外がスローされます。
Kotlin ドライバーを使用してフローからデータにアクセスする方法の詳細については、「フローからのデータへのアクセス 」に関するガイドを参照してください。
例
次のスニペットは、 movies
コレクションのクエリに一致するすべてのドキュメントを検索して出力します。 次のオブジェクトとメソッドを使用します。
find()
メソッドに渡されるクエリフィルター。lt()
フィルターは、長さが 15 分未満の映画のみに一致します。返されたドキュメントをタイトルの降順で整理するソート(「A」の前に「Z」)。
title
フィールドとimdb
フィールドに オブジェクトを含み、ヘルパー メソッドexcludeId()
を使用して_id
フィールドを除外するプロジェクション。
注意
この例では、接続 URI を使用して MongoDB のインスタンスに接続します。 MongoDB インスタンスへの接続の詳細については、接続ガイド を参照してください。
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.runBlocking data class Movie(val title: String, val runtime: Int, val imdb: IMDB){ data class IMDB(val rating: Double) } data class Results(val title: 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") val projectionFields= Projections.fields( Projections.include(Movie::title.name, Movie::imdb.name), Projections.excludeId() ) val resultsFlow = collection.withDocumentClass<Results>() .find(lt(Movie::runtime.name, 15)) .projection(projectionFields) .sort(Sorts.descending(Movie::title.name)) resultsFlow.collect { println(it) } mongoClient.close() }
このページで言及されているクラスとメソッドについて詳しくは、次の API ドキュメントを参照してください。