문서 메뉴
문서 홈
/ / /
Go 드라이버
/ / /

반환되는 결과 수 제한

이 페이지의 내용

  • 개요
  • Limit
  • 다양한 옵션
  • 집계
  • 추가 정보

이 가이드에서는 읽기 작업에서 반환되는 문서 수를 제한하는 방법을 확인할 수 있습니다.

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

type Course struct {
Title string
Enrollment int32
}

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

coll := client.Database("db").Collection("courses")
docs := []interface{}{
Course{Title: "Romantic Era Music", Enrollment: 15},
Course{Title: "Concepts in Topology", Enrollment: 35},
Course{Title: "Ancient Greece", Enrollment: 100},
Course{Title: "Physiology I", Enrollment: 60},
}
result, err := coll.InsertMany(context.TODO(), docs)

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

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

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

쿼리에서 반환되는 문서 수를 제한하려면 반환하려는 문서 수를 읽기 작업 옵션의 SetLimit() 메서드에 전달하세요.

다음 읽기 작업은 options 객체를 매개변수로 사용합니다.

  • Find()

  • CountDocuments()

  • gridfs.Bucket.Find()

제한이 0이거나 일치하는 문서 수를 초과하는 경우 메서드는 모든 문서를 반환합니다. 제한이 음수인 경우 메서드는 음수의 절댓값을 한도로 간주해 문서를 검색한 후 커서를 닫습니다.

다음 예제에서는 enrollment 필드 값이 20보다 큰 두 문서를 반환하는 방법을 보여 줍니다.

filter := bson.D{{"enrollment", bson.D{{"$gt", 20}}}}
opts := options.Find().SetLimit(2)
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))
}

드라이버는 다른 옵션을 설정하다 순서에 관계없이 마지막으로 제한 동작을 수행합니다.

다음 예제에서는 다음과 같은 동작으로 Find() 작업을 수행합니다.

  • enrollment 필드에서 결과를 내림차순으로 정렬합니다.

  • 첫 번째 문서 건너뛰기

  • 나머지 문서 중 처음 두 개를 반환합니다.

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", -1}}).SetLimit(2).SetSkip(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))
}

다음 옵션 구성 중 하나를 사용해도 동일한 결과가 나옵니다.

opts := options.Find().SetSort(bson.D{{"enrollment", -1}}).SetSkip(1).SetLimit(2)
opts := options.Find().SetLimit(2).SetSort(bson.D{{"enrollment", -1}}).SetSkip(1)
opts := options.Find().SetLimit(2).SetSkip(1).SetSort(bson.D{{"enrollment", -1}})
opts := options.Find().SetSkip(1).SetSort(bson.D{{"enrollment", -1}}).SetLimit(2)
opts := options.Find().SetSkip(1).SetLimit(2).SetSort(bson.D{{"enrollment", -1}})

또한 $limit 단계를 포함하여 집계 파이프라인에 한도를 지정할 수도 있습니다.

다음 예제에서는 세 개의 문서를 반환하는 방법을 보여 줍니다.

limitStage := bson.D{{"$limit", 3}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{limitStage})
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))
}

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

  • 쿼리 지정

  • 데이터 조회

  • 결과 정렬

  • 반환된 결과 건너뛰기

  • 집계

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

← 반환된 결과 건너뛰기