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

複数ドキュメントの検索

コレクション内の複数のドキュメントをクエリするには、 MongoCollectionオブジェクトで find()メソッドを呼び出します。 find()メソッドにクエリフィルターを渡すと、コレクション内のフィルターに一致するドキュメントを検索して返します。 フィルターを含めない場合、MongoDB はコレクション内のすべてのドキュメントを返します。

Kotlin ドライバーを使用して MongoDB をクエリする方法の詳細については、ドキュメントのクエリに関するガイドをご覧ください。

また、一致したドキュメントを指定された順序で整理するsort()や、返されたドキュメントに含まれるフィールドを構成するprojection()など、 find()メソッドにメソッドを連結することもできます。

sort()メソッドの詳細については、 ソート に関するガイドをご覧ください。 projection()メソッドの詳細については、 プロジェクション に関するガイドをご覧ください

find() メソッドは、結果にアクセスし、整理し、走査するためのいくつかのメソッドを提供するクラスである、FindFlow のインスタンスを返します。

FindFlow は、 Kotlin コルーチン ライブラリから 委任インターフェースFlowからもメソッドを取得します。 collect()メソッドを呼び出して、取得された結果を反復処理できます。 また、ターミナルfirstOrNull() nullfirst()メソッドを呼び出します。たとえば、 のように最初のドキュメントを返すか、結果がない場合は を返し、 を呼び出してコレクション内の最初のドキュメントを返します。クエリに一致するドキュメントがない場合、 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 ドキュメントを参照してください。

  • FindFlow

  • find()

戻る

findOne