cursor.max()
정의
cursor.max()
중요
Mongo쉬 방법
이는
mongosh
메서드입니다. 이는Node.js
또는 기타 프로그래밍 언어별 드라이버 메서드에 대한 설명서가 아닙니다 .대부분의 경우
mongosh
메서드는 레거시mongo
셸 메서드와 동일한 방식으로 작동합니다. 그러나 일부 레거시 메서드는mongosh
에서 사용할 수 없습니다.레거시
mongo
셸 문서는 해당 MongoDB 서버 릴리스 문서를 참조하세요.MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 문서를 참조하세요.
find()
의 결과를 제한하기 위해 특정 인덱스에 대한 배타적 상한을 지정합니다.max()
는 복합 키 인덱스의 상한을 지정하는 방법을 제공합니다.
매개변수
max()
메서드에는 다음과 같은 매개변수가 있습니다.
매개 변수 | 유형 | 설명 |
---|---|---|
indexBounds | 문서 | 인덱스 키의 배타적 상한입니다. |
indexBounds
매개변수의 프로토타입 형식은 다음과 같습니다.
{ field1: <max value>, field2: <max value2> ... fieldN:<max valueN> }
필드는 특정 인덱스의 모든 키에 순서대로 해당됩니다.
참고
인덱스 사용하기
max()
는 주로 mongos
(샤딩) 프로세스를 지원하기 위해 존재하며 쿼리 수정자 $max
를 감싸는 셸 래퍼입니다.
참고
v3.2부터 지원이 중단되었습니다
v3 부터 시작합니다.2, $max
연산자는 mongosh
에서 더 이상 사용되지 않습니다. mongosh
에서는 cursor.max()
을 대신 사용합니다.
행동
인덱스 선택과의 상호 작용
max()
는 필드에 인덱스가 필요하고 쿼리가 이 인덱스를 사용하도록 강요하기 때문에 가능하면 쿼리에 $lt
연산자를 사용하는 것이 좋습니다. 다음 예시를 활용할 수 있습니다.
db.products.find( { _id: { $in: [ 6, 7 ] } } ).max( { price: NumberDecimal("1.39") } ).hint( { price: 1 } )
이 쿼리는 _id
의 인덱스가 더 나을 수 있더라도 price
필드의 인덱스를 사용합니다.
인덱스 바운드
max()
을 min()
와 함께 사용하여 범위를 지정하는 경우:
max()
으로 지정된 경계는min()
로 지정된 경계보다 커야 합니다.
max()
미포함: min()
$min
및 $max
연산자는 시스템이 일반적인 쿼리 계획을 피해야 함을 나타냅니다. 대신 $min
및 $max
에 지정된 값으로 인덱스 경계가 명시적으로 지정되는 인덱스 스캔을 구성합니다.
경고
두 경계 중 하나를 지정하지 않으면 쿼리 계획은 한 쪽이 제한되지 않은 인덱스 스캔이 됩니다. 이렇게 하면 연산자를 모두 포함하지 않는 쿼리 또는 두 연산자를 모두 사용하여 인덱스 스캔을 보다 엄격하게 제한하는 쿼리에 비해 성능이 저하될 수 있습니다.
예제
아래 예시에서는 다음 문서를 포함하는 products
라는 이름의 샘플 컬렉션을 만듭니다.
db.products.insertMany([ { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : NumberDecimal("1.99") }, { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : NumberDecimal("1.99") }, { "_id" : 3, "item" : "apple", "type" : "jonagold", "price" : NumberDecimal("1.29") }, { "_id" : 4, "item" : "apple", "type" : "jonathan", "price" : NumberDecimal("1.29") }, { "_id" : 5, "item" : "apple", "type" : "mcintosh", "price" : NumberDecimal("1.29") }, { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : NumberDecimal("1.29") }, { "_id" : 7, "item" : "orange", "type" : "cara cara", "price" : NumberDecimal("2.99") }, { "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : NumberDecimal("1.99") }, { "_id" : 8, "item" : "orange", "type" : "valencia", "price" : NumberDecimal("0.99") }, { "_id" : 10, "item" : "orange", "type" : "navel", "price" : NumberDecimal("1.39") } ])
컬렉션에 다음 인덱스를 만듭니다.
db.products.createIndexes( [ { "item" : 1, "type" : 1 }, { "item" : 1, "type" : -1 }, { "price" : 1 } ] )
인덱스의
max()
순서를 사용하여{ item: 1, type: 1 }
item
apple
type
jonagold
는 와 동일한 및 와 동일한 의 경계 아래에 있는 문서로 쿼리를 제한합니다.db.products.find().max( { item: 'apple', type: 'jonagold' } ).hint( { item: 1, type: 1 } ) 이 쿼리는 다음 문서를 반환합니다.
{ "_id" : 6, "item" : "apple", "type" : "cortland", "price" : NumberDecimal("1.29") } { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : NumberDecimal("1.99") } { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : NumberDecimal("1.99") } 인덱스
{ price: 1 }
의 순서를 사용하여max()
는NumberDecimal("1.99")
과 동일한price
의 인덱스 키 경계 아래에 있는 문서로 쿼리를 제한하고min()
)은NumberDecimal("1.39")
과 동일한price
의 인덱스 키 경계 위에 있거나 위에 있는 문서로 쿼리를 제한합니다.db.products.find().min( { price: NumberDecimal("1.39") } ).max( { price: NumberDecimal("1.99") } ).hint( { price: 1 } ) 이 쿼리는 다음 문서를 반환합니다.
{ "_id" : 10, "item" : "orange", "type" : "navel", "price" : NumberDecimal("1.39") }