MongoDB $slice 연산자로 배열 요소 하나만 가져오기
MongoDB에서 배열에 담긴 데이터 중 일부만 조회하고 싶다면 $slice 연산자를 사용하면 됩니다. 이 글에서는 배열의 첫 번째 요소 하나만 슬라이스해 가져오는 방법을 실제 예제와 함께 단계별로 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 컬렉션을 생성하고 문서를 삽입합니다.
> db.demo579.insertOne(
... {
... "_id" : 101,
... "details" : { "FirstName" : "John" },
... "Marks" : [ 56,78,90,34,45,74 ]
... }
... );
{ "acknowledged" : true, "insertedId" : 101 }
2. 전체 문서 확인하기
find() 메서드를 사용해 컬렉션에 저장된 모든 문서를 조회해 보겠습니다.
> db.demo579.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : 101,
"details" : {
"FirstName" : "John"
},
"Marks" : [
56,
78,
90,
34,
45,
74
]
}Marks 필드에는 총 6개의 숫자가 배열 형태로 저장되어 있는 것을 확인할 수 있습니다.
3. $slice로 배열의 한 요소만 조회하기
이제 배열의 요소 중 하나만 슬라이스해 가져오는 쿼리를 작성해 보겠습니다. 두 번째 인자인 프로젝션 부분에서 Marks 필드에 $slice 값을 1로 지정하고, 불필요한 details와 _id 필드는 0으로 설정해 제외했습니다.
> db.demo579.find({},{Marks : {$slice : 1} ,"details":0,"_id":0})쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "Marks" : [ 56 ] }실행 결과를 보면 Marks 배열의 첫 번째 요소인 56만 반환된 것을 확인할 수 있습니다.
$slice 연산자 동작 방식 정리
$slice 연산자는 지정한 값에 따라 다르게 동작합니다.
양수(n): 배열의 처음부터 n개의 요소를 반환합니다. 예를 들어 $slice: 3을 지정하면 앞의 3개 요소가 조회됩니다.
음수(-n): 배열의 끝에서 n개의 요소를 반환합니다. 예를 들어 $slice: -2를 지정하면 마지막 2개 요소가 조회됩니다.
이처럼 $slice 연산자를 활용하면 배열 전체가 아닌 필요한 만큼의 요소만 효율적으로 가져올 수 있어, 대용량 배열 데이터를 다룰 때 응답 크기를 줄이고 성능을 개선하는 데 유용합니다.