MongoDB 배열 투영으로 첫 번째 배열 요소 가져오기
MongoDB에서 배열 필드의 첫 번째 요소만 조회하고 싶다면, $slice 프로젝션 연산자를 쿼리 조건 연산자인 $gte와 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 컬렉션을 생성하고 문서를 삽입합니다.
> db.demo640.insertOne({Name:"John","Scores":[80,90,75]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e9c2eb86c954c74be91e6e0")
}
> db.demo640.insertOne({Name:"Chris","Scores":[85,70,89]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e9c2ece6c954c74be91e6e1")
}2단계: find()로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo640.find();
위 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5e9c2eb86c954c74be91e6e0"), "Name" : "John", "Scores" : [ 80, 90, 75 ] }
{ "_id" : ObjectId("5e9c2ece6c954c74be91e6e1"), "Name" : "Chris", "Scores" : [ 85, 70, 89 ] }3단계: $slice를 활용한 배열 투영 쿼리 실행
이제 $slice 프로젝션을 적용하여 각 문서의 Scores 배열에서 첫 번째 요소만 반환하는 쿼리를 실행해 보겠습니다.
> db.demo640.find({Scores:{$gte:85}},{ "Scores": {$slice : 1}});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e9c2eb86c954c74be91e6e0"), "Name" : "John", "Scores" : [ 80 ] }
{ "_id" : ObjectId("5e9c2ece6c954c74be91e6e1"), "Name" : "Chris", "Scores" : [ 85 ] }결과 분석 및 핵심 정리
출력 결과를 보면 각 문서의 Scores 배열이 원래 세 개의 요소를 가지고 있었음에도 불구하고, {$slice: 1} 옵션 덕분에 첫 번째 요소 하나만 반환된 것을 확인할 수 있습니다.
- $slice: n — 배열의 처음부터 n개의 요소를 반환합니다.
- $slice: -n — 배열의 끝에서부터 n개의 요소를 반환합니다.
- $gte — 쿼리 조건으로, Scores 배열 내 값이 85 이상인 문서만 필터링합니다.
이처럼 $slice는 대용량 배열 데이터에서 필요한 부분만 효율적으로 가져올 때 매우 유용한 프로젝션 연산자입니다. 네트워크 전송량을 줄이고 애플리케이션 성능을 개선하는 데 활용할 수 있습니다.