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

結果を並べ替える

項目一覧

  • Overview
  • サンプルデータの例
  • ソートの方法
  • オプション
  • 集計
  • ソート方向
  • 上昇
  • 下降
  • 詳細情報
  • API ドキュメント

このガイドでは、 MongoDB Rustドライバーを使用してソート操作を実行し、読み取り操作の結果の順序を指定する方法を説明します。

読み取り操作でドキュメントが返される順序を変更するには、オプションをビルドするときに sort() メソッドを使用します。sort() メソッドは、返されたドキュメントを 1 つ以上のフィールドの値で特定の方向に並べ替えるようにMongoDBに指示します。返されたドキュメントをフィールド別に昇順(一番小さいものが先頭)でソートするには、1 の値を使用します。降順(一番大きいものが先頭)で並べ替えるには、-1 を使用します。ソートを指定しない場合、 MongoDBはクエリ結果の順序を保証しません。

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

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

次の例に示すように、クエリによって検索された結果を並べ替えるには、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、チームメイトのチーム

次のサブセクションでは、これらのソート条件を指定する方法を示します。

昇順の並べ替えを指定するには、並べ替えるフィールドと 1sort() メソッドに渡します。

次の例では、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 }

降順の並べ替えを指定するには、並べ替えるフィールドと -1sort() メソッドに渡します。

次の例では、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 }

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

  • クエリを指定する

  • Retrieve Data

  • 複合演算子

  • 集計

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

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

  • find()

  • FindOptions

  • FindOneOptions

  • Cursor

  • Aggregate()

  • AggregateOptions

戻る

検索テキスト