MongoDB에서 특정 필드에 저장된 배열 값의 개수를 제한하고 싶다면 $slice 연산자를 사용하면 됩니다. $slice는 쿼리 결과에서 배열 필드가 반환할 요소의 개수를 지정할 수 있어, 대용량 배열 데이터 중 일부만 확인할 때 매우 유용합니다.
1. 샘플 컬렉션 생성
먼저 테스트용 컬렉션을 만들고 문서를 하나 삽입해 보겠습니다.
> db.numberOfValuesDemo.insertOne({"Values":[100,200,300,900,1000,98]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefb736ef71edecf6a1f6ab")
}2. 삽입된 문서 확인하기
find() 메서드를 사용해 컬렉션의 모든 문서를 조회합니다.
> db.numberOfValuesDemo.find().pretty();
실행 결과는 다음과 같습니다.
출력 결과
{
"_id" : ObjectId("5cefb736ef71edecf6a1f6ab"),
"Values" : [
100,
200,
300,
900,
1000,
98
]
}현재 Values 필드에는 총 6개의 값이 들어 있습니다.
3. $slice로 반환되는 값의 개수 제한하기
이제 $slice 연산자를 사용하여 조회 시 배열에서 처음 2개의 값만 가져오도록 제한해 보겠습니다.
> db.numberOfValuesDemo.find({},{ "Values": { "$slice": 2 } } );출력 결과
{ "_id" : ObjectId("5cefb736ef71edecf6a1f6ab"), "Values" : [ 100, 200 ] }결과를 보면 원래 6개였던 값이 처음 2개(100, 200)만 반환된 것을 확인할 수 있습니다.
$slice 사용 팁
- 양수(n): 배열의 앞에서부터 n개의 요소를 반환합니다. 예: { $slice: 2 } → 첫 번째, 두 번째 요소
- 음수(-n): 배열의 뒤에서부터 n개의 요소를 반환합니다. 예: { $slice: -2 } → 마지막 두 요소인 1000, 98 반환
- [skip, limit] 형식: 건너뛸 개수와 가져올 개수를 함께 지정할 수 있습니다. 예: { $slice: [1, 2] } → 첫 번째 요소를 건너뛰고 그다음 2개(200, 300) 반환
이처럼 $slice 연산자를 활용하면 배열 전체를 가져오지 않고 필요한 만큼의 데이터만 효율적으로 조회할 수 있습니다.