Docs Menu
Docs Home
/ / /
Go
/ / /

결과 정렬

이 페이지의 내용

  • 개요
  • 샘플 데이터
  • 정렬 방향
  • 오름차순
  • 내림차순
  • 타이 처리
  • 집계
  • 추가 정보
  • API 문서

이 가이드에서는 작업 결과의 순서를 지정하는 방법을 배울 수 있습니다.

이 가이드의 예시에서는 다음 Course 구조체를 courses collection의 문서 모델로 사용합니다.

type Course struct {
Title string
Enrollment int32
}

이 가이드의 예시를 실행하려면 다음 스니펫을 사용하여 샘플 데이터를 db.courses collection에 로드하세요.

coll := client.Database("db").Collection("courses")
docs := []interface{}{
Course{Title: "World Fiction", Enrollment: 35},
Course{Title: "Abstract Algebra", Enrollment: 60},
Course{Title: "Modern Poetry", Enrollment: 12},
Course{Title: "Plate Tectonics", Enrollment: 35},
}
result, err := coll.InsertMany(context.TODO(), docs)

존재하지 않는 데이터베이스 및 collection

쓰기 작업을 수행할 때 필요한 데이터베이스 및 collection이 없는 경우 서버는 이를 암시적으로 생성합니다.

각 문서에는 각 문서의 titleenrollment 필드에 해당하는 과정의 제목 및 최대 등록 수를 비롯한 University 과정에 대한 설명이 포함되어 있습니다.

결과의 순서를 지정하려면 정렬 필드와 방향을 지정하는 인터페이스를 작업 옵션의 SetSort() 메서드에 전달합니다.

다음 작업은 옵션을 매개변수로 사용합니다:

  • Find()

  • FindOne()

  • FindOneAndDelete()

  • FindOneAndUpdate()

  • FindOneAndReplace()

  • gridfs.Bucket.Find()

오름차순 또는 내림차순 정렬 방향을 설정할 수 있습니다.

오름차순 정렬은 결과가 가장 작은 순서에서 가장 큰 순서로 정렬됩니다. 오름차순 정렬을 지정하려면 정렬하려는 필드와 1SetSort() 메서드에 전달합니다.

오름차순 정렬을 사용하면 메서드가 Boolean 유형 값을 false에서 true, String 유형 값은 a에서 z로, 숫자 유형 값은 음의 무한대부터 양의 무한대까지 정렬합니다.

다음 예에서는 enrollment 필드에 오름차순 정렬을 지정합니다.

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", 1}})
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

내림차순 정렬은 결과가 가장 큰 순서에서 가장 작은 순서로 정렬됩니다. 내림차순 정렬을 지정하려면 정렬하려는 필드와 -1SetSort() 메서드에 전달합니다.

내림차순 정렬을 사용하면 이 메서드는 Boolean 유형 값은 true에서 false, String 유형 값은 z에서 a로, 숫자 유형 값은 양수 무한대에서 음수 무한대로 정렬합니다.

다음 예에서는 enrollment 필드에 내림차순 정렬을 지정합니다:

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", -1}})
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

결과를 정렬하는 데 사용하는 필드에 둘 이상의 문서에 동일한 값이 있는 경우 타이가 발생합니다. MongoDB는 타이가 발생할 경우 순서를 보장하지 않습니다.

예를 들어 샘플 데이터에서는 다음 문서에서 enrollment에 대해 타이가 발생했습니다:

{"title":"World Fiction","enrollment":35}
{"title":"Plate Tectonics","enrollment":35}

추가 필드를 정렬하여 원래 정렬의 타이를 해결할 수 있습니다. 문서에 대한 특정 순서를 보장하려면 동률이 발생하지 않는 정렬 필드를 선택합니다.

다음 예에서는 enrollment 필드에 내림차순 정렬을 지정한 다음 title 필드에 오름차순 정렬을 지정합니다.

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", -1}, {"title", 1}})
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

집계 파이프라인에 정렬을 지정하는 $sort 단계를 포함할 수도 있습니다.

다음 예에서는 enrollment 필드에 내림차순 정렬을 지정한 다음 title 필드에 오름차순 정렬을 지정합니다.

sortStage := bson.D{{"$sort", bson.D{{"enrollment", -1}, {"title", 1}}}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{sortStage})
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

언급된 작업에 대해 자세히 알아보려면 다음 가이드를 참조하세요.

  • 쿼리 지정

  • Retrieve Data

  • 복합 작업

  • 집계

텍스트 검색에서 텍스트 점수를 정렬하는 방법에 대해 알아보려면 텍스트 검색을 참조하세요.

이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

Retrieve Distinct Values