Docs Menu
Docs Home
/ / /
Rust 드라이버
/ / /

결과 정렬

이 페이지의 내용

  • 개요
  • 예시용 샘플 데이터
  • 정렬 방법
  • 옵션
  • 집계
  • 정렬 방향
  • 오름차순
  • 내림차순
  • 추가 정보
  • API 문서

이 가이드 에서는 MongoDB Rust 드라이버 를 사용하여 정렬 작업을 수행하여 읽기 작업 결과의 순서를 지정하는 방법을 학습 수 있습니다.

읽기 작업에서 문서를 반환하는 순서를 변경하는 옵션을 빌드할 때 sort() 메서드를 사용합니다. sort() 메서드는 MongoDB 에 반환된 문서를 특정 방향의 하나 이상의 필드 값에 따라 정렬하도록 지시합니다. 반환된 문서를 필드 별로 오름차순(낮은 항목부터)으로 정렬하려면 1 값을 사용합니다. 대신 내림차순(가장 큰 것부터)으로 정렬하려면 -1 을(를) 사용하세요. 정렬을 지정하지 않으면 MongoDB 는 쿼리 결과의 순서를 보장하지 않습니다.

이 가이드의 예시에서는 books collection의 문서에 대한 모델로 다음 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);
}

정렬 방향은 오름차순 또는 내림차순 중 하나일 수 있습니다. 오름차순 정렬은 결과가 가장 작은 순서에서 가장 큰 순서로 정렬됩니다. 내림차순 정렬은 결과가 가장 큰 순서에서 가장 작은 순서로 정렬됩니다.

다음 목록에는 오름차순으로 정렬된 데이터의 예가 포함되어 있습니다.

  • 숫자: 1, 2, 3, 43, 43, 55, 120

  • 날짜: 1990-03-10, 1995-01-01, 2005-10-30, 2005-12-21

  • 단어(ASCII): 바나나, 딜, 당근, 오이, 후무스

다음 목록에는 내림차순으로 정렬된 데이터의 예가 포함되어 있습니다.

  • 숫자: 100, 30, 12, 12, 9, 3, 1

  • 날짜: 2020-01-01, 1998-12-11, 1998-12-10, 1975-07-22

  • 단어(역 ASCII): 배,포도,사과,치즈

다음 하위 섹션에서는 이러한 정렬 기준을 지정하는 방법을 보여 줍니다.

오름차순 정렬을 지정하려면 정렬하려는 필드 와 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()

  • 찾기 옵션

  • FindOneOptions

  • 커서

  • 집계()

  • AggregateOptions

돌아가기

텍스트 검색