Overview
このガイドでは、次のメソッドを find メソッドに連結して、読み取り操作から返されるドキュメントを指定する方法を学習できます。
サンプル データ
このガイドの例では、Atlas サンプル データセットにある sample_mflix データベースの movies コレクションを使用します。MongoDB Atlas クラスターを作成し、サンプル データセットをロードする方法については、「Atlas スタートガイド」をご覧ください。
Limit
読み取り操作から返されるドキュメントの最大数を指定するには、操作に limit オプションを適用します。このオプションは、limit メソッドを find メソッドに連結することで設定できます。
次の例では、 cuisineフィールドの値が'Italian'であるすべてのレストランを検索し、結果を5ドキュメントに制限します。
let mut cursor = my_coll .find(doc! { "cuisine": "Italian" }) .limit(5) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Restaurant { name: "V & T Restaurant", cuisine: "Italian" } Restaurant { name: "Gargiulo'S Restaurant", cuisine: "Italian" } Restaurant { name: "Patsy'S Italian Restaurant", cuisine: "Italian" } Restaurant { name: "John'S Restaurant", cuisine: "Italian" } Restaurant { name: "Ferdinando'S Restaurant", cuisine: "Italian" }
Tip
上記の例では、データベース内の自然な順序に従ってクエリに一致する最初の 5 つのドキュメントが返されます。 次のセクションでは、指定された順序でドキュメントを返す方法について説明します。
Sort
指定した順序でドキュメントを返すには、 読み取り操作に sort オプションを適用します。このオプションは、sort setter メソッドを find メソッドに連結することで設定できます。
sort を呼び出すときに、フィールドを渡して、結果を と並べ替え方向で並べ替えます。並べ替え方向の値が 1 の場合、値は最低から最高の順にソートされ、-1 の値は最高から最低の順にソートされます。ソートを指定しない場合、 MongoDB はクエリ結果の順序を保証しません。
次の例では、 cuisineフィールド値が 'Italian' であるすべてのドキュメントを、nameフィールド値の昇順でソートして返します。
let mut cursor = my_coll .find(doc! { "cuisine": "Italian" }) .sort(doc! { "name": 1 }) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Restaurant { name: "Antonio'S Trattoria", cuisine: "Italian" } Restaurant { name: "Antonioni'S", cuisine: "Italian" } Restaurant { name: "Antonucci", cuisine: "Italian" } ... Restaurant { name: "Zucchero E Pomodori", cuisine: "Italian" }
スキップ
クエリ結果を返す前に指定した数のドキュメントをスキップするには、読み取り操作に skip オプションを適用します。このオプションは、skip setter メソッドを find メソッドに連結することで設定できます。
次の例では、 boroughフィールドの値が'Manhattan'であるすべてのドキュメントを返し、最初の10ドキュメントをスキップします。
let mut cursor = my_coll .find(doc! { "borough": "Manhattan" }) .skip(10) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Restaurant { name: "Beyond Thai Kitchen", cuisine: "Thai" } Restaurant { name: "Rainbow Room", cuisine: "American" } ... Restaurant { name: "Fairfield Inn Suites Penn Station", cuisine: "Other" }
制限、ソート、スキップの組み合わせ
limit、sort、skip メソッドを単一の find メソッド呼び出しに連鎖させることができます。 これにより、 読み取り操作から返されるソートされたドキュメントの最大数を設定でき、返される前に指定された数のドキュメントをスキップできます。
次の例では、 cuisine の値が 'Italian' である 5 ドキュメントが返されます。 結果は nameフィールド値の昇順でソートされ、最初の 10 ドキュメントはスキップされます。
let mut cursor = my_coll .find(doc! { "cuisine": "Italian" }) .sort(doc! { "name": 1 }) .skip(10) .limit(5) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Restaurant { name: "Acqua", cuisine: "Italian" } Restaurant { name: "Acqua Restaurant", cuisine: "Italian" } Restaurant { name: "Acqua Santa", cuisine: "Italian" } Restaurant { name: "Acquista Trattoria", cuisine: "Italian" } Restaurant { name: "Acquolina Catering", cuisine: "Italian" }
注意
これらのメソッドを呼び出す順序によって、返されるドキュメントは変更されません。サーバーは、最初にソート操作、次にスキップ操作、次に 制限操作を実行するように呼び出しの順序を自動的に並べ替えます。
詳細情報
ドキュメント検索の詳細については、 ドキュメントの検索ガイドをご覧ください。
クエリの指定の詳細については、「 クエリの指定」ガイドを参照してください。
API ドキュメント
findメソッドとそのオプションについて詳しくは、 APIドキュメント を参照してください。