Docs Menu

반환되는 결과 수 제한

이 가이드에서는 MongoDB 코틀린(Kotlin) 드라이버를 사용하여 읽기 작업에서 반환되는 결과 수를 제한하는 방법을 배울 수 있습니다.

읽기 작업에서 반환하는 문서 수를 제한하려면 limit() 를 사용합니다. 이 인스턴스 메서드는 읽기 작업이 반환할 수 있는 최대 문서 수를 지정합니다. 지정된 제한에 도달할 만큼 문서가 충분하지 않은 경우 더 적은 수를 반환할 수 있습니다. limit()skip() 인스턴스 메서드와 함께 사용하면 건너뛰기가 먼저 적용되고 건너뛰기 후 남은 문서에만 제한이 적용됩니다. skip() 메서드에 대한 자세한 내용은반환된 문서 건너뛰기 가이드대한 가이드를 참조하세요.

다음 예시에서는 각각 컬렉션에 데이터를 삽입하는 방법, limit()을 사용하여 반환되는 문서 수를 제한하는 방법, limit()skip()과 결합하여 쿼리에서 반환되는 결과를 더욱 좁히는 방법을 보여 줍니다.

다음 섹션에서는 이 샘플 문서를 업데이트하는 예를 제공합니다.

{ "_id": 1, "title": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 }
{ "_id": 2, "title": "Les Misérables", "author": "Hugo", "length": 1462 }
{ "_id": 3, "title": "Atlas Shrugged", "author": "Rand", "length": 1088 }
{ "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 }
{ "_id": 5, "title": "Cryptonomicon", "author": "Stephenson", "length": 918 }
{ "_id": 6, "title": "A Dance with Dragons", "author": "Martin", "length": 1104 }

이 데이터는 다음 Kotlin 데이터 클래스로 모델링됩니다.

data class Book(
@BsonId val id: Int,
val title: String,
val author: String,
val length: Int
)

다음 예에서는 collection을 쿼리하여 가장 긴 책 세 권을 반환합니다. 먼저 모든 문서를 쿼리와 일치시킨 다음 length 필드를 정렬하여 길이가 긴 책을 길이가 짧은 책보다 먼저 반환합니다. 마지막으로 반환 값을 3 개 문서로 제한하고 다음 세 문서를 길이별로 정렬하여 반환합니다.

val results = collection.find()
.sort(descending("length"))
.limit(3)
results.collect { println(it) }
Book(id=2, title=Les Misérables, author=Hugo, length=1462)
Book(id=6, title=A Dance with Dragons, author=Martin, length=1104)
Book(id=4, title=Infinite Jest, author=Wallace, length=1104)

find 명령은 항상 정렬을 먼저 적용하고 제한을 그 뒤에 적용하므로 limit()sort() 을(를) 호출하는 순서는 중요하지 않습니다. 다음 두 호출은 동일합니다.

collection.find().sort(descending("length")).limit(3)
collection.find().limit(3).sort(descending("length"))

그 다음으로 긴 책 세 권을 보려면 find() 호출에 skip() 메서드를 추가하세요. skip() 에 전달된 정수 인수에 따라 찾기 작업이 반환하는 문서 수가 결정됩니다. 이 작업은 네 번째에서 여섯 번째로 긴 책을 설명하는 문서를 반환합니다.

val results = collection.find()
.sort(descending("length"))
.skip(3)
.limit(3)
results.collect { println(it) }
Book(id=3, title=Atlas Shrugged, author=Rand, length=1088)
Book(id=5, title=Cryptonomicon, author=Stephenson, length=918)
Book(id=1, title=The Brothers Karamazov, author=Dostoyevsky, length=824)

이러한 방식으로 skip()limit()을 결합하여 컬렉션에 페이징을 구현하고 컬렉션의 작은 하위 집합만 한 번에 반환할 수 있습니다.

참고

여러 쿼리에서 안정적인 정렬을 보장하려면 고유 키(예: _id)를 사용하여 정렬해야 합니다. 그렇지 않으면 skip()limit() 호출이 sort()와 함께 사용되었을 때 예기치 않은 결과가 발생할 수 있습니다.

예를 들어 다음 데이터를 가정해 보겠습니다.

{ type: "computer", data: "1", serial_no: 235235 }
{ type: "computer", data: "2", serial_no: 235237 }
{ type: "computer", data: "3", serial_no: 235239 }
{ type: "computer", data: "4", serial_no: 235241 }

type으로만 정렬한 경우 sort()는 반환 시 동일한 순서를 보장하지 않습니다. sort()skip()limit()을 추가하면 다양한 쿼리에 대해 다양한 문서가 반환될 수 있습니다. 이 경우 data 또는 serial_no 기준으로 정렬하면 둘 다 고유 키이므로 안정적인 정렬이 보장됩니다.

이 가이드에 언급된 메서드 및 클래스에 대한 자세한 내용은 다음 API 설명서를 참조하세요.