MongoDB에서 배열 필드에 저장된 값의 개수를 제한하고 싶다면 $slice 프로젝션 연산자를 사용하면 됩니다. $slice는 쿼리 결과에서 배열 필드의 일부 요소만 반환하도록 지정할 수 있어, 대용량 배열 데이터 중 필요한 부분만 효율적으로 조회할 때 유용합니다.
예제 컬렉션 생성하기
먼저 데모용 컬렉션을 만들고 문서를 하나 삽입해 보겠습니다.
> db.demo173.insertOne({"ListOfValues":[10,40,100,560,700,900]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e383a4f9e4f06af551997e4")
}삽입된 문서 확인하기
find() 메서드를 사용해 컬렉션의 모든 문서를 조회합니다.
> db.demo173.find().pretty();
위 쿼리는 다음과 같은 결과를 출력합니다.
{
"_id" : ObjectId("5e383a4f9e4f06af551997e4"),
"ListOfValues" : [10, 40, 100, 560, 700, 900]
}현재 ListOfValues 필드에는 총 6개의 값이 저장되어 있습니다.
$slice로 반환되는 값의 개수 제한하기
이제 $slice 연산자를 사용해 배열에서 마지막 2개의 값만 가져오는 쿼리를 실행해 보겠습니다. 음수 값을 지정하면 배열의 끝에서부터 해당 개수만큼 요소를 반환합니다.
> db.demo173.find({}, { "ListOfValues": { "$slice": -2 } });실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e383a4f9e4f06af551997e4"), "ListOfValues" : [ 700, 900 ] }$slice 동작 방식 정리
- 양수(n): 배열의 앞에서부터 n개의 요소를 반환합니다. 예: { "$slice": 2 } → [10, 40]
- 음수(-n): 배열의 끝에서부터 n개의 요소를 반환합니다. 예: { "$slice": -2 } → [700, 900]
이처럼 $slice를 활용하면 전체 배열을 가져오지 않고도 필요한 범위의 값만 선택적으로 조회할 수 있어, 네트워크 트래픽과 애플리케이션 메모리 사용량을 줄이는 데 도움이 됩니다.