Overview
このガイドでは、 Kotlin Sync ドライバーを使用して、読み取り操作により MongoDB コレクションからデータを検索する方法を学習できます。 find()メソッドを呼び出して、クエリフィルターで指定された一連の条件に一致するドキュメントを検索できます。
サンプル データ
このガイドの例では、Atlas サンプル データセットの sample_restaurants データベースの restaurants コレクションを使用します。無料の MongoDB 配置を作成し、サンプルデータセットを読み込む方法については、MongoDB の スタートガイドを参照してください。
このコレクション内のドキュメントは、次の Kotlin データ クラスによってモデル化されます。
data class Restaurant( val name: String, val cuisine: String )
ドキュメントの検索
find()メソッドは、コレクションからドキュメントを取得します。 このメソッドはクエリフィルターを受け取り、一致するすべてのドキュメントを返します。 クエリフィルターは、ドライバーがコレクションのドキュメントを照合するために使用する基準を指定するドキュメントです。
クエリフィルターの詳細については、「クエリの指定」ガイドを参照してください。
1 ドキュメントの特定の例
次の例では、first() メソッドを find() メソッド呼び出しに連鎖させて、cuisineフィールドの値が "Spanish" である最初のドキュメントを検索します。
val results = collection.find(eq(Restaurant::cuisine.name, "Spanish")).first()
前述の例の find()操作では、次の例に示すように、印刷可能なMongoDBドキュメントが返されます。
val results = collection.find(eq(Restaurant::cuisine.name, "Spanish")).first() println(results)
Restaurant(name=Tropicoso Club, cuisine=Spanish)
ドキュメントの検索の例
次の例では、 find()メソッドを使用して、 cuisineフィールドの値が"Spanish"であるすべてのドキュメントを検索します。
val results = collection.find(eq(Restaurant::cuisine.name, "Spanish"))
前述の例のfind()操作はFindIterableオブジェクトを返します。このオブジェクトは、次の例に示すように、 forEach()メソッドを使用して反復処理できます。
val results = collection.find(eq(Restaurant::cuisine.name, "Spanish")) results.forEach { result -> println(result) }
Restaurant(name=Tropicoso Club, cuisine=Spanish) Restaurant(name=Beso, cuisine=Spanish) Restaurant(name=Sabor Latino Restaurant, cuisine=Spanish) ...
注意
すべてのドキュメントの検索
コレクション内のすべてのドキュメントを検索するには、 find()メソッドに空のフィルターを渡します。
val results = collection.find()
検索動作の変更
find()メソッド呼び出しにメソッドを連鎖させることで、 find()メソッドの動作を変更できます。 次の表では、クエリの変更に使用される一般的な方法について説明しています。
方式 | 説明 |
|---|---|
| バッチするごとに返されるドキュメントの数を制限します。 バッチするサイズの詳細については、 MongoDB Serverマニュアルの cursor.batchSize() を参照してください。 |
| クエリの 照合 オプションを設定します。 |
| クエリに添付する文字列を指定します。これにより、サーバーログとプロファイル データ内の操作を追跡して解釈することができます。 |
| クエリに一致する最初のドキュメントを返します。一致するドキュメントが存在しない場合は |
| クエリに一致する最初のドキュメントを返します。一致するドキュメントが存在しない場合は |
| クエリに使用するインデックスを指定します。 |
| クエリから返されるドキュメントの数を制限します。 |
| スキップするドキュメントの数を設定します。 |
| クエリに適用するソート条件を定義します。 |
次の例では limit() メソッドを連鎖させて、クエリによって返されるドキュメントの数を 10 に制限します。
val results = collection .find(eq(Restaurant::cuisine.name, "Spanish")) .limit(10)
の動作を変更するメソッドの完全なリストについては、find() クラスのAPIドキュメントを参照してください FindIterable。
詳細情報
クエリフィルターの詳細については、「クエリの指定」を参照してください。
Kotlin Syncドライバーを使用してドキュメントを取得する実行可能なコード例については、ドキュメントの検索を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。