MongoDB에서 정수와 소수 값이 모두 포함된 필드 정렬하기
MongoDB에서 정수(int)와 소수(double)가 뒤섞여 저장된 숫자 필드를 정렬해야 할 때가 있습니다. 다행히 BSON 기준으로 숫자 타입은 값 자체를 비교하기 때문에, 별도의 타입 변환 없이 sort() 메서드만으로 자연스럽게 정렬할 수 있습니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 샘플 컬렉션 생성
먼저 정수와 소수 값을 함께 가진 문서들로 컬렉션을 생성합니다.
> db.demo755.insertOne({"Value":10});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e72a930c785c834e572")
}
> db.demo755.insertOne({"Value":10.5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e75a930c785c834e573")
}
> db.demo755.insertOne({"Value":9.5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e79a930c785c834e574")
}
> db.demo755.insertOne({"Value":12.5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e7fa930c785c834e575")
}
> db.demo755.insertOne({"Value":11.5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e87a930c785c834e576")
}
> db.demo755.insertOne({"Value":6});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e97a930c785c834e577")
}위 예제에서는 10, 6 같은 정수와 10.5, 9.5, 12.5, 11.5 같은 소수가 하나의 'Value' 필드에 함께 저장되어 있습니다.
2단계: find()로 전체 문서 조회
find() 메서드를 사용해 컬렉션에 저장된 모든 문서를 확인합니다.
> db.demo755.find();
이 명령은 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5eae9e72a930c785c834e572"), "Value" : 10 }
{ "_id" : ObjectId("5eae9e75a930c785c834e573"), "Value" : 10.5 }
{ "_id" : ObjectId("5eae9e79a930c785c834e574"), "Value" : 9.5 }
{ "_id" : ObjectId("5eae9e7fa930c785c834e575"), "Value" : 12.5 }
{ "_id" : ObjectId("5eae9e87a930c785c834e576"), "Value" : 11.5 }
{ "_id" : ObjectId("5eae9e97a930c785c834e577"), "Value" : 6 }삽입한 순서대로 문서가 그대로 반환되는 것을 볼 수 있습니다.
3단계: sort()로 오름차순 정렬
이제 정수와 소수가 섞여 있는 'Value' 필드를 오름차순으로 정렬하는 쿼리입니다. sort({필드명: 1})처럼 값에 1을 지정하면 오름차순, -1을 지정하면 내림차순으로 정렬됩니다.
> db.demo755.find().sort({Value:1});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5eae9e97a930c785c834e577"), "Value" : 6 }
{ "_id" : ObjectId("5eae9e79a930c785c834e574"), "Value" : 9.5 }
{ "_id" : ObjectId("5eae9e72a930c785c834e572"), "Value" : 10 }
{ "_id" : ObjectId("5eae9e75a930c785c834e573"), "Value" : 10.5 }
{ "_id" : ObjectId("5eae9e87a930c785c834e576"), "Value" : 11.5 }
{ "_id" : ObjectId("5eae9e7fa930c785c834e575"), "Value" : 12.5 }정리
실행 결과를 보면 정수와 소수의 구분 없이 6 → 9.5 → 10 → 10.5 → 11.5 → 12.5 순으로 숫자 크기대로 깔끔하게 정렬된 것을 확인할 수 있습니다. MongoDB는 내부적으로 숫자 타입(int, double, decimal 등)을 값 기준으로 비교하므로, 타입이 혼합된 필드라도 sort() 메서드 하나면 충분합니다. 내림차순 정렬이 필요하다면 sort({Value:-1})로 옵션만 바꿔주면 됩니다.