반환되는 결과 수 제한
개요
이 가이드에서는 읽기 작업에서 반환되는 문서 수를 제한하는 방법을 확인할 수 있습니다.
샘플 데이터
이 가이드의 예시에서는 다음 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이 없는 경우 서버는 이를 암시적으로 생성합니다.
각 문서에는 각 문서의 title
및 enrollment
필드에 해당하는 과정의 제목 및 최대 등록 수를 비롯한 University 과정에 대한 설명이 포함되어 있습니다.
Limit
쿼리에서 반환되는 문서 수를 제한하려면 반환하려는 문서 수를 읽기 작업 옵션의 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 문서
이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.