Docs Menu
Docs Home
/ / /
Rust ドライバー
/ / /

返される結果の数を制限する

項目一覧

  • Overview
  • サンプルデータの例
  • ドキュメントの制限
  • limit() メソッドの例
  • オプションの例
  • 集計の例
  • 詳細情報
  • API ドキュメント

このガイドでは、 MongoDB Rustドライバーを使用して制限操作を実行する方法を学習できます。これらの操作は、 読み取り操作から返されるドキュメントの数を指定します。

読み取り操作によって返されるドキュメントの数を制限するには、 limit() メソッドを使用します。指定された制限に達する数のドキュメントが存在しない場合は、この操作によって返されるドキュメントの数が少なくなります。

limit() メソッドを skip() メソッドで使用すると、最初にスキップが適用され、制限は残りのドキュメントにのみ適用されます。スキップ操作の詳細については、 返された結果のスキップガイドをご覧ください。

このガイドの例では、 booksコレクション内のドキュメントのモデルとして次のBook構造体を使用します。

#[derive(Debug, Serialize, Deserialize)]
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() メソッドを 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 ドキュメントを参照してください。

戻る

結果をスキップする