MongoDB에서 특정 필드 값이 두 숫자 사이에 있는 문서를 조회할 때, 경계값 자체는 제외하고 싶은 경우가 있습니다. 예를 들어 50과 60 사이의 값을 구하되, 50과 60은 결과에 포함하지 않으려면 비교 연산자 $gt(초과)와 $lt(미만)를 함께 사용하면 됩니다.
기본 문법
50과 60 두 숫자를 모두 제외하고 그 사이의 요소만 가져오려면 아래 문법을 사용합니다.
db.yourCollectionName.find({yourFieldName: { $gt : 50 , $lt : 60 } } );반대로 50과 60도 결과에 포함하고 싶다면 $gte(이상)와 $lte(이하)를 사용하면 됩니다.
db.yourCollectionName.find({yourFieldName: { $gte : 50 , $lte : 60 } } );예제 컬렉션 생성
먼저 테스트용 컬렉션을 만들고 여러 문서를 삽입해 보겠습니다.
> db.returnEverythingBetween50And60.insertOne({"Amount":55});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd3c42eedc6604c74817cdb") }
> db.returnEverythingBetween50And60.insertOne({"Amount":45});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd3c432edc6604c74817cdc") }
> db.returnEverythingBetween50And60.insertOne({"Amount":50});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd3c436edc6604c74817cdd") }
> db.returnEverythingBetween50And60.insertOne({"Amount":59});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd3c43aedc6604c74817cde") }
> db.returnEverythingBetween50And60.insertOne({"Amount":60});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd3c43eedc6604c74817cdf") }
> db.returnEverythingBetween50And60.insertOne({"Amount":49});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd3c442edc6604c74817ce0") }
> db.returnEverythingBetween50And60.insertOne({"Amount":71});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd3c445edc6604c74817ce1") }저장된 전체 문서 확인
find() 메서드에 pretty()를 붙여 컬렉션의 모든 문서를 출력해 보겠습니다.
> db.returnEverythingBetween50And60.find().pretty();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cd3c42eedc6604c74817cdb"), "Amount" : 55 }
{ "_id" : ObjectId("5cd3c432edc6604c74817cdc"), "Amount" : 45 }
{ "_id" : ObjectId("5cd3c436edc6604c74817cdd"), "Amount" : 50 }
{ "_id" : ObjectId("5cd3c43aedc6604c74817cde"), "Amount" : 59 }
{ "_id" : ObjectId("5cd3c43eedc6604c74817cdf"), "Amount" : 60 }
{ "_id" : ObjectId("5cd3c442edc6604c74817ce0"), "Amount" : 49 }
{ "_id" : ObjectId("5cd3c445edc6604c74817ce1"), "Amount" : 71 }경계값(50, 60)을 제외한 범위 조회 쿼리
이제 50과 60 두 숫자를 모두 제외하고 그 사이의 값만 반환하는 쿼리를 실행해 보겠습니다.
> db.returnEverythingBetween50And60.find({Amount: { $gt : 50 , $lt : 60 } } );실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cd3c42eedc6604c74817cdb"), "Amount" : 55 }
{ "_id" : ObjectId("5cd3c43aedc6604c74817cde"), "Amount" : 59 }결과 분석
출력 결과를 보면 $gt: 50(50 초과)과 $lt: 60(60 미만) 조건 덕분에 Amount가 55와 59인 문서만 반환되었습니다. 경계값인 50과 60은 물론, 범위를 벗어난 45, 49, 71도 모두 제외된 것을 확인할 수 있습니다.
정리하면, MongoDB에서 범위 양 끝의 숫자를 제외한 중간값만 조회하려면 $gt와 $lt를 조합하고, 경계값까지 포함하려면 $gte와 $lte를 사용하면 됩니다.