Overview
このガイドでは、 MongoDB Rustドライバーを使用して制限操作を実行する方法を学習できます。これらの操作は、 読み取り操作から返されるドキュメントの数を指定します。
読み取り操作によって返されるドキュメントの数を制限するには、  limit() メソッドを使用します。指定された制限に達する数のドキュメントが存在しない場合は、この操作によって返されるドキュメントの数が少なくなります。
limit() メソッドを skip() メソッドで使用すると、最初にスキップが適用され、制限は残りのドキュメントにのみ適用されます。スキップ操作の詳細については、 返された結果のスキップガイドをご覧ください。
サンプルデータの例
このガイドの例では、 booksコレクション内のドキュメントのモデルとして次のBook構造体を使用します。
struct Book {     name: String,     author: String,     length: i32, } 
次のコードは、booksコレクションにサンプルデータを挿入する方法を示しています。
let uri = "connection string"; let client = Client::with_uri_str(uri).await?; let my_coll: Collection<Book> = client.database("db").collection("books"); let books = vec![     Book {         id: 1,         name: "The Brothers Karamazov".to_string(),         author: "Dostoyevsky".to_string(),         length: 824,     },     Book {         id: 2,         name: "Atlas Shrugged".to_string(),         author: "Rand".to_string(),         length: 1088,     },     Book {         id: 3,         name: "Les Misérables".to_string(),         author: "Hugo".to_string(),         length: 1462,     },     Book {         id: 4,         name: "A Dance with Dragons".to_string(),         author: "Martin".to_string(),         length: 1104,     }, ]; my_coll.insert_many(books).await?; 
ドキュメントの制限
返されるドキュメントの最大数は、 クエリ または集計パイプラインで指定できます。
このセクションでは、次の方法で結果を制限する方法について説明します。
- limit()メソッド : - limit()メソッドを- find()メソッドにチェーンする
- FindOptions 構造体 : - limitオプションを使用
- 集計パイプライン : - $limitステージを使用するパイプラインを作成する
limit() メソッドの例
返されるドキュメント数を制限するには、limit() メソッドを find() メソッドに連鎖させることができます。
この例では、次のアクションを実行する find()操作を実行します。
- 結果を - lengthフィールド値の昇順で並べ替えます
- 結果を最初の 3 つのドキュメントに制限します 
let mut cursor = my_coll     .find(doc! {})     .sort(doc! { "length": 1 })     .limit(3).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); } 
Book { name: "The Brothers Karamazov", author: "Dostoyevsky", length: 824 } Book { name: "Atlas Shrugged", author: "Rand", length: 1088 } Book { name: "A Dance with Dragons", author: "Martin", length: 1104 } 
オプションの例
あるいは、クエリのオプションを設定して再利用する場合は、FindOptions を使用できます。limit() オプション ビルダ メソッドを使用して、FindOptions 構造体の limitフィールドを設定します。次に、with_options() メソッドを find() メソッドにチェーンし、FindOptions 構造体を with_options() メソッドのパラメーターとして渡します。
この例では、次のアクションを実行する find()操作を実行します。
- 結果をフィルタリングして、 - lengthフィールドが- 1000より大きいドキュメントのみを含めます
- 結果を - lengthフィールド値の昇順で並べ替えます
- 結果を最初の 2 つのドキュメントに制限します 
let filter = doc! { "length": { "$gt": 1000 } }; let find_options = FindOptions::builder()     .sort(doc! { "length": 1 })     .limit(2)     .build(); let mut cursor = my_coll.find(filter).with_options(find_options).await?; while let Some(result) = cursor.try_next().await? {     println!("{:?}", result); } 
Book { name: "Atlas Shrugged", author: "Rand", length: 1088 } Book { name: "A Dance with Dragons", author: "Martin", length: 1104 } 
集計の例
返される結果を制限するには、集計パイプラインで $limit ステージを使用します。集計操作の詳細については、 集計ガイドを参照してください。
この例では、次のアクションを実行する集計パイプラインを実行します。
- 結果を - lengthフィールド値の降順で並べ替えます
- 返される結果を最初の 2 つのドキュメントに制限します 
let pipeline = vec![     doc! { "$match": {} },     doc! { "$sort": { "length": -1 } },     doc! { "$limit": 2 }, ]; let mut cursor = my_coll.aggregate(pipeline).await?; while let Some(result) = cursor.try_next().await? {     println!("{:?}", result); } 
Document({"_id": Int32(3), "name": String("Les Misérables"), "author": String("Hugo"), "length": Int32(1462)}) Document({"_id": Int32(4), "name": String("A Dance with Dragons"), "author": String("Martin"), "length": Int32(1104)}) 
詳細情報
このガイドで言及されている操作の詳細については、次のガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。