MongoDB에서 집계(Aggregate)로 정렬하기
MongoDB에서 문서를 정렬하려면 $match 연산자와 aggregate 메서드를 함께 사용하면 됩니다. 먼저 컬렉션을 생성하고 문서를 삽입한 뒤, 집계 파이프라인을 통해 조건에 맞는 데이터를 내림차순으로 정렬하는 전체 과정을 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
insertOne() 메서드를 사용해 demo67 컬렉션에 학생 나이 정보가 담긴 문서들을 추가합니다.
> db.demo67.insertOne({"StudentAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e289edf602d9a2ff1828ed8")
}
> db.demo67.insertOne({"StudentAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e289ee1602d9a2ff1828ed9")
}
> db.demo67.insertOne({"StudentAge":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e289ee3602d9a2ff1828eda")
}2. find()로 전체 문서 확인
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo67.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e289edf602d9a2ff1828ed8"), "StudentAge" : 23 }
{ "_id" : ObjectId("5e289ee1602d9a2ff1828ed9"), "StudentAge" : 21 }
{ "_id" : ObjectId("5e289ee3602d9a2ff1828eda"), "StudentAge" : 24 }3. $match와 $sort를 사용한 집계 쿼리
MongoDB에서 집계(aggregate)로 정렬을 수행하는 쿼리는 다음과 같습니다. $match로 StudentAge가 20보다 큰 문서만 필터링하고, 이어서 $sort를 통해 나이 기준 내림차순(-1)으로 정렬합니다.
> db.demo67.aggregate([
... {$match: {"StudentAge": {$gt: 20} }}
... ,{$sort: {"StudentAge": -1} }
... ]);위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e289ee3602d9a2ff1828eda"), "StudentAge" : 24 }
{ "_id" : ObjectId("5e289edf602d9a2ff1828ed8"), "StudentAge" : 23 }
{ "_id" : ObjectId("5e289ee1602d9a2ff1828ed9"), "StudentAge" : 21 }정리
집계 파이프라인에서 $sort의 값이 -1이면 내림차순, 1이면 오름차순으로 정렬됩니다. 또한 $match를 파이프라인 앞쪽에 배치하면 불필요한 문서를 조기에 제거할 수 있어 정렬 성능도 함께 향상됩니다.