정의
cursor.max()중요
Mongo쉬 방법
이 페이지에서는
mongosh메서드에 대해 설명합니다. 이는 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다.MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.
find()의 결과를 제한하기 위해 특정 인덱스에 대한 배타적 상한을 지정합니다.max()는 복합 키 인덱스의 상한을 지정하는 방법을 제공합니다.
매개변수
max() 메서드에는 다음과 같은 매개변수가 있습니다.
Parameter | 유형 | 설명 |
|---|---|---|
| 문서 | 인덱스 키의 배타적 상한입니다. |
indexBounds 매개변수의 프로토타입 형식은 다음과 같습니다.
{ field1: <max value>, field2: <max value2> ... fieldN:<max valueN> }
필드는 특정 인덱스의 모든 키에 순서대로 해당됩니다.
호환성
이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
- MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
참고
이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원에 관해 자세히 알아보려면 지원되지 않는 명령을 참조하십시오.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
행동
인덱스 선택과의 상호 작용
max()는 필드에 인덱스가 필요하고 쿼리가 이 인덱스를 사용하도록 강요하기 때문에 가능하면 쿼리에 $lt 연산자를 사용하는 것이 좋습니다. 다음 예시를 활용할 수 있습니다.
db.products.find( { _id: { $in: [ 6, 7 ] } } ).max( { price: Decimal128("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" : Decimal128("1.99") }, { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : Decimal128("1.99") }, { "_id" : 3, "item" : "apple", "type" : "jonagold", "price" : Decimal128("1.29") }, { "_id" : 4, "item" : "apple", "type" : "jonathan", "price" : Decimal128("1.29") }, { "_id" : 5, "item" : "apple", "type" : "mcintosh", "price" : Decimal128("1.29") }, { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : Decimal128("1.29") }, { "_id" : 7, "item" : "orange", "type" : "cara cara", "price" : Decimal128("2.99") }, { "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : Decimal128("1.99") }, { "_id" : 8, "item" : "orange", "type" : "valencia", "price" : Decimal128("0.99") }, { "_id" : 10, "item" : "orange", "type" : "navel", "price" : Decimal128("1.39") } ])
컬렉션에 다음 인덱스를 만듭니다.
db.products.createIndexes( [ { "item" : 1, "type" : 1 }, { "item" : 1, "type" : -1 }, { "price" : 1 } ] )
{ item: 1, type: 1 }인덱스max()의 순서를 사용하여item인apple및type인jonagold의 경계 아래에 있는 문서로 쿼리 를 제한합니다.db.products.find().max( { item: 'apple', type: 'jonagold' } ).hint( { item: 1, type: 1 } ) 이 쿼리는 다음 문서를 반환합니다.
{ "_id" : 6, "item" : "apple", "type" : "cortland", "price" : Decimal128("1.29") } { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : Decimal128("1.99") } { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : Decimal128("1.99") } 인덱스
{ price: 1 }의 순서를 사용하여max()는Decimal128("1.99")과 동일한price의 인덱스 키 경계 아래에 있는 문서로 쿼리를 제한하고min())은Decimal128("1.39")과 동일한price의 인덱스 키 경계 위에 있거나 위에 있는 문서로 쿼리를 제한합니다.db.products.find().min( { price: Decimal128("1.39") } ).max( { price: Decimal128("1.99") } ).hint( { price: 1 } ) 이 쿼리는 다음 문서를 반환합니다.
{ "_id" : 10, "item" : "orange", "type" : "navel", "price" : Decimal128("1.39") }