MongoDB에서 배열 요소를 특정 범위만큼 잘라서 가져오고 싶다면 $slice 연산자에 매개변수를 활용하면 됩니다. $slice는 두 개의 매개변수를 받을 수 있는데, 첫 번째 매개변수는 가져올 요소의 시작 위치(오프셋)를 지정하고, 두 번째 매개변수는 가져올 개수, 즉 범위를 지정합니다.
컬렉션 생성하기
먼저 데모용 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo54.insertOne({"ListOfValues":[100,2030,5353,7364,635,535,524,423,2434,1323,799874,90]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e27151ecfb11e5c34d89914")
}find() 메서드로 문서 조회하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo54.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5e27151ecfb11e5c34d89914"),
"ListOfValues" : [
100,
2030,
5353,
7364,
635,
535,
524,
423,
2434,
1323,
799874,
90
]
}$slice를 범위와 함께 사용하는 쿼리
이제 $slice 연산자에 시작 위치와 범위를 지정하여 특정 구간의 배열 요소만 조회해 보겠습니다. 아래 쿼리는 인덱스 5번 위치부터 3개의 요소를 가져옵니다.
> db.demo54.find({}, { "ListOfValues": { $slice: [5,3]}}).pretty();실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5e27151ecfb11e5c34d89914"),
"ListOfValues" : [
535,
524,
423
]
}결과를 보면 원래 배열의 여섯 번째 요소인 535부터 세 개의 값(535, 524, 423)이 반환된 것을 확인할 수 있습니다. 이처럼 $slice에 [시작 위치, 개수] 형태의 배열을 전달하면 원하는 범위의 데이터만 효율적으로 추출할 수 있습니다.