AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

ドキュメントの検索

このガイドでは、 Kotlinドライバーを使用して、読み取り操作によりMongoDBコレクションからデータを検索する方法を学習できます。find() メソッドを呼び出して、クエリフィルターで指定された一連の条件に一致するドキュメントを検索できます。

このガイドの例では、Atlas のサンプルデータセットから、sample_mflixデータベースのmoviesコレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、ガイドを参照してください。

次の Kotlin データ クラスは、このコレクション内のドキュメントをモデル化します。

data class Movie(val title: String, val runtime: Int, val imdb: IMDB){
data class IMDB(val rating: Double)
}

次のKotlinデータクラスは、このガイドの例によって返された結果をモデル化します。

data class Results(val title: String)

find()メソッドは、コレクションからドキュメントを取得します。 このメソッドはクエリフィルターを受け取り、一致するすべてのドキュメントを返します。 クエリフィルターは、ドライバーがコレクションのドキュメントを照合するために使用する基準を指定するドキュメントです。

クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。

次の例では、firstOrNull() メソッドを find() メソッド呼び出しに連鎖させて、nameフィールドの値が "The Room" である最初のドキュメントを検索します。

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)
.firstOrNull()
if (resultsFlow == null) {
println("No results found.");
} else {
println(resultsFlow)
}
Movie(title=The Room, runtime=99, imdb=IMDB(rating=3.7))

この例では、find() メソッドを使用して、runtimeフィールドの値が 15 より小さいすべてのドキュメントを検索します。find()操作はFindFlowオブジェクトを返します。このオブジェクトは、次の例に示すように、collect() メソッドを使用して反復処理できます。

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)
resultsFlow.collect { println(it) }
Movie(title=Meshes of the Afternoon, runtime=14, imdb=IMDB(rating=8.0))
Movie(title=The Band Concert, runtime=9, imdb=IMDB(rating=7.9))
Movie(title=What's Opera, Doc?, runtime=7, imdb=IMDB(rating=8.3))
...

注意

すべてのドキュメントの検索

コレクション内のすべてのドキュメントを検索するには、 find()メソッドに空のフィルターを渡します。

val resultsFlow = collection.withDocumentClass<Results>()
.find()

FindFlowインスタンスにメソッドを連鎖させることで、find() メソッドの動作を変更できます。次の表では、クエリを変更するために一般的に使用される方法について説明します。

方式
説明

batchSize()

バッチするごとに返すドキュメントの数を制限します。デフォルト値は 64 ドキュメントです。

バッチ サイズの詳細については、MongoDB Server マニュアルのcursor.batchSize() を参照してください。

collation()

クエリの 照合 オプションを設定します。

collect()

フロー内の各要素を処理し、指定された Lambda を適用します。

comment()

クエリに付属する string を指定します。これは、サーバー ログとプロファイル データでの操作を追跡して解釈するのに役立ちます。

first()

クエリに一致する最初のドキュメントを返すか、一致するドキュメントが存在しない場合はMongoClientExceptionをスローします。

firstOrNull()

クエリに一致する最初のドキュメントを返します。一致するドキュメントが存在しない場合は、 null を返します。

hint()

クエリに使用するインデックスを指定します。

limit()

クエリから返されるドキュメントの数を制限します。

skip()

スキップするドキュメントの数を設定します。

sort()

クエリに適用するソート条件を定義します。

次の例では limit() メソッドを連鎖させて、クエリによって返されるドキュメントの数を 10 に制限します。

val projectionFields= Projections.fields(
Projections.include(Movie::title.name, Movie::imdb.name),
Projections.excludeId()
)
val resultsFlow = collection.withDocumentClass<Results>()
.find()
.projection(projectionFields)
.limit(10)

find() の動作を変更するメソッドの完全なリストについては、 KotlinドライバーAPIドキュメントの FindFlowクラスを参照してください。

クエリフィルターの詳細については、「クエリの指定」を参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。