結果を並べ替える
Overview
このガイドでは、 MongoDB Rustドライバーを使用してソート操作を実行し、読み取り操作の結果の順序を指定する方法を説明します。
読み取り操作でドキュメントが返される順序を変更するには、オプションをビルドするときに sort()
メソッドを使用します。sort()
メソッドは、返されたドキュメントを 1 つ以上のフィールドの値で特定の方向に並べ替えるようにMongoDBに指示します。返されたドキュメントをフィールド別に昇順(一番小さいものが先頭)でソートするには、1
の値を使用します。降順(一番大きいものが先頭)で並べ替えるには、-1
を使用します。ソートを指定しない場合、 MongoDBはクエリ結果の順序を保証しません。
サンプルデータの例
このガイドの例では、 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?;
ソートの方法
クエリによって検索された結果をソートすることも、集計パイプライン内の結果をソートすることもできます。
次の例に示すように、クエリによって検索された結果を並べ替えるには、sort()
メソッドを find()
メソッドにチェーンします。
let mut cursor = my_coll .find(doc! {}) // 1 for ascending order, -1 for descending order .sort(doc! { "author": 1 }) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
オプション
あるいは、FindOptions
構造体の sort()
メソッドを使用することもできます。
次の例では、次の動作でfind()
操作を実行します。
author
フィールドの値の昇順で結果を並べ替えます最初のドキュメントをスキップします
残りのドキュメントを返します
let find_options = FindOptions::builder() // 1 for ascending order, -1 for descending order .sort(doc! { "author": 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); }
集計
集計パイプライン内で結果を並べ替えるには、$sort
ステージを作成し、ステージのリストを aggregate()
メソッドに渡します。
次の例は、author
フィールドの値で昇順にドキュメントをソートする $sort
ステージを作成する方法を示しています。
let pipeline = vec![ doc! { "$match": {} }, // 1 for ascending order, -1 for descending order doc! { "$sort": { "author": 1 } } ]; let mut cursor = my_coll.aggregate(pipeline).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
ソート方向
並べ替えの方向は昇順または降順のいずれかです。 昇順で並べ替えると、結果が最小から最大の順に並べられます。 降順で並べ替えると、結果が最大から最小の順に並べられます。
次のリストには、昇順でソートされたデータの例が含まれています。
Numbers: 1, 2, 3, 43, 43, 55, 120
Dates: 1990-03-10, 1995-01-01, 2005-10-30, 2005-12-21
単語(ASCII) : バナー、ディル、によう
次のリストには、降順でソートされたデータの例が含まれています。
Numbers: 100, 30, 12, 12, 9, 3, 1
Dates: 2020-01-01, 1998-12-11, 1998-12-10, 1975-07-22
単語(逆 ASCII): ピアリング、品種、Apple、チームメイトのチーム
次のサブセクションでは、これらのソート条件を指定する方法を示します。
上昇
昇順の並べ替えを指定するには、並べ替えるフィールドと 1
を sort()
メソッドに渡します。
例
次の例では、name
フィールドで昇順の並べ替えを指定します。
let mut cursor = my_coll .find(doc! {}) .sort(doc! { "name": 1 }) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Book { "_id": 4, "name": "A Dance with Dragons", "author": Martin, "length": 1104 } Book { "_id": 2, "name": "Atlas Shrugged", "author": Rand, "length": 1088 } Book { "_id": 3, "name": "Les Miserables", "author": Hugo, "length": 1462 } Book { "_id": 1, "name": "The Brothers Karamazov", "author": Dostoevsky, "length": 824 }
下降
降順の並べ替えを指定するには、並べ替えるフィールドと -1
を sort()
メソッドに渡します。
例
次の例では、name
フィールドで降順の並べ替えを指定します。
let mut cursor = my_coll .find(doc! {}) .sort(doc! { "name": -1 }) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Book { "_id": 1, "name": "The Brothers Karamazov", "author": Dostoevsky, "length": 824 } Book { "_id": 3, "name": "Les Miserables", "author": Hugo, "length": 1462 } Book { "_id": 2, "name": "Atlas Shrugged", "author": Rand, "length": 1088 } Book { "_id": 4, "name": "A Dance with Dragons", "author": Martin, "length": 1104 }
詳細情報
このガイドで言及されている操作について詳しくは、以下を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。