Overview
このガイドでは、 MongoDB Rustドライバーを使用して、結果を返すときに指定された数のドキュメントをスキップする読み取り操作を実行する方法を学習します。
サンプルデータの例
このガイドの例では、 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 { name: "The Brothers Karamazov".to_string(), author: "Dostoyevsky".to_string(), length: 824, }, Book { name: "Atlas Shrugged".to_string(), author: "Rand".to_string(), length: 1088, }, Book { name: "Les Misérables".to_string(), author: "Hugo".to_string(), length: 1462, }, Book { name: "A Dance with Dragons".to_string(), author: "Martin".to_string(), length: 1104, }, ]; my_coll.insert_many(books, None).await?;
ドキュメントをスキップ
クエリによって検索された結果をスキップすることも、集計パイプライン内の結果をスキップすることもできます。
スキップされたドキュメントの数がクエリに一致したドキュメントの数を超える場合、そのクエリはドキュメントを返しません。
検索操作では、フィールドでソートされていない自然な順序でドキュメントが返されます。 無作為なドキュメントのスキップを回避するには、スキップ オプションを設定する前に、sort() メソッドを使用して一意の値を持つフィールドのドキュメントをソートします。詳しくは、 結果の並べ替え に関するガイドをご覧ください。
クエリ結果の例
ドキュメントをスキップするには、FindOptionsインスタンスを初期化し、skip() メソッドを使用してスキップするドキュメントの数を指定します。次に、FindOptions 構造体を find() メソッドのパラメーターとして渡します。
この例では、次のアクションを実行する find()操作を実行します。
結果を
authorフィールド値の昇順で並べ替えます最初の 2 つのドキュメントをスキップします
残りのドキュメントを返します
let find_options = FindOptions::builder() .sort(doc! { "author": 1 }) .skip(2) .build(); let mut cursor = my_coll.find(doc! {}, find_options).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 }
集計の例
集計パイプラインの $skip ステージを使用してドキュメントをスキップできます。集計操作の詳細については、 集計ガイドを参照してください。
この例では、次のアクションを実行する集計パイプラインを実行します。
結果を
authorフィールド値の昇順で並べ替えます最初のドキュメントをスキップします
残りのドキュメントを返します
let pipeline = vec![ doc! { "$match": {} }, doc! { "$sort": { "author": 1 } }, doc! { "$skip": 1 }, ]; let mut cursor = my_coll.aggregate(pipeline, None).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Document({"_id": ObjectId("..."), "name": String("Les Misérables"), "author": String("Hugo"), "length": Int32(1462)}) Document({"_id": ObjectId("..."), "name": String("A Dance with Dragons"), "author": String("Martin"), "length": Int32(1104)}) Document({"_id": ObjectId("..."), "name": String("Atlas Shrugged"), "author": String("Rand"), "length": Int32(1088)})
詳細情報
このガイドで言及されている操作の詳細については、次のガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。