MongoDB에서 배열 타입의 필드에 저장된 값 중 마지막 몇 개만 확인하고 싶은 경우가 자주 있습니다. 이럴 때 $slice 연산자를 사용하면 매우 간단하게 해결할 수 있습니다. 이번 글에서는 컬렉션을 생성하고, $slice 연산자에 음수 값을 적용하여 배열의 마지막 두 값을 조회하는 방법을 단계별로 알아보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 문서가 포함된 컬렉션을 생성합니다. 아래 예제에서는 여러 개의 숫자 값을 가진 배열 필드를 포함한 문서를 삽입합니다.
> db.numberOfValuesDemo.insertOne({"Values":[100,200,300,900,1000,98]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefb736ef71edecf6a1f6ab")
}2. 컬렉션의 모든 문서 확인하기
find() 메서드와 pretty() 메서드를 함께 사용하면 컬렉션 내 모든 문서를 보기 좋게 출력할 수 있습니다.
> db.numberOfValuesDemo.find().pretty();
출력 결과
{
"_id" : ObjectId("5cefb736ef71edecf6a1f6ab"),
"Values" : [
100,
200,
300,
900,
1000,
98
]
}현재 Values 필드에는 총 6개의 값이 순서대로 저장되어 있습니다.
3. $slice 연산자로 마지막 두 값 조회하기
배열의 마지막 두 값을 가져오려면 find() 메서드의 프로젝션 부분에서 $slice 연산자에 음수(-2)를 지정하면 됩니다. 음수를 사용하면 배열의 끝에서부터 지정한 개수만큼의 요소가 반환됩니다.
> db.numberOfValuesDemo.find({},{ "Values": { "$slice": -2 } } );출력 결과
{ "_id" : ObjectId("5cefb736ef71edecf6a1f6ab"), "Values" : [ 1000, 98 ] }$slice 연산자 동작 원리 정리
- 양수 값 (예: $slice: 2) — 배열의 처음부터 지정한 개수만큼 요소를 반환합니다.
- 음수 값 (예: $slice: -2) — 배열의 끝에서부터 지정한 개수만큼 요소를 반환합니다.
위 실행 결과를 보면 전체 6개의 값 중 마지막 두 값인 1000과 98만 반환된 것을 확인할 수 있습니다. 이처럼 $slice 연산자는 별도의 복잡한 집계 파이프라인 없이도 원하는 범위의 배열 요소를 손쉽게 추출할 수 있는 유용한 기능입니다.