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

返された結果をスキップする

項目一覧

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

このガイドでは、 MongoDB Rustドライバーを使用して、結果を返すときに指定された数のドキュメントをスキップする読み取り操作を実行する方法を学習します。

このガイドの例では、 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?;

クエリによって検索された結果をスキップすることも、集計パイプライン内の結果をスキップすることもできます。

このセクションでは、次の方法で結果をスキップする方法について説明します。

  • skip() メソッド:skip() メソッドを メソッドにチェーンするfind()

  • FindOptions 構造体 :skip() オプションビルダ メソッドを使用して 構造体を構成しますFindOptions

  • 集計パイプライン :$skip ステージを使用するパイプラインを作成する

スキップされたドキュメントの数がクエリに一致したドキュメントの数を超える場合、そのクエリはドキュメントを返しません。

検索操作では、フィールドでソートされていない自然な順序でドキュメントが返されます。 無作為なドキュメントのスキップを回避するには、スキップ オプションを設定する前に、sort() メソッドを使用して一意の値を持つフィールドのドキュメントをソートします。詳しくは、 結果の並べ替え に関するガイドをご覧ください。

ドキュメントをスキップするには、skip() メソッドを find() メソッドに連鎖させることができます。skip() メソッドは、結果セットの先頭から省略するドキュメントの数を指定する整数を受け取ります。

この例では、次のアクションを実行する find()操作を実行します。

  • 結果を authorフィールド値の昇順で並べ替えます

  • 最初の 2 つのドキュメントをスキップします

  • 残りのドキュメントを返します

let mut cursor = my_coll
.find(doc! {})
.sort(doc! { "author": 1 })
.skip(2).await?;
while let Some(result) = cursor.try_next().await? {
println!("{:?}", result);
}
Book { name: "A Dance with Dragons", author: "Martin", length: 1104 }
Book { name: "Atlas Shrugged", author: "Rand", length: 1088 }

あるいは、クエリのオプションを設定して再利用する場合は、FindOptions を使用できます。skip() オプション ビルダ メソッドを使用して、FindOptions 構造体の skipフィールドを設定します。次に、with_options() メソッドを find() メソッドにチェーンし、FindOptions 構造体を with_options() メソッドのパラメーターとして渡します。

この例では、次のアクションを実行する find()操作を実行します。

  • 結果を nameフィールド値の降順で並べ替えます

  • 最初のドキュメントをスキップします

  • 残りのドキュメントを返します

let find_options = FindOptions::builder()
.sort(doc! { "name": -1 })
.skip(1)
.build();
let mut cursor = my_coll.find(doc! {}).with_options(find_options).await?;
while let Some(result) = cursor.try_next().await? {
println!("{:?}", result);
}
Book { name: "Les Misérables", author: "Hugo", length: 1462 }
Book { name: "Atlas Shrugged", author: "Rand", length: 1088 }

集計パイプラインの $skip ステージを使用してドキュメントをスキップできます。集計操作の詳細については、 集計ガイドを参照してください。

この例では、次のアクションを実行する集計パイプラインを実行します。

  • 結果を authorフィールド値の昇順で並べ替えます

  • 最初のドキュメントをスキップします

  • 残りのドキュメントを返します

let pipeline = vec![
doc! { "$match": {} },
doc! { "$sort": { "author": 1 } },
doc! { "$skip": 1 },
];
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)})
Document({"_id": Int32(2), "name": String("Atlas Shrugged"), "author": String("Rand"), "length": Int32(1088)})

このガイドで言及されている操作の詳細については、次のガイドを参照してください。

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

戻る

結果を並べ替える