MongoDB에서 배열의 처음 4개 값 건너뛰고 다음 3개만 표시하기
MongoDB에서 배열 필드의 특정 구간에 있는 요소만 조회하고 싶다면 $slice 연산자를 활용하면 됩니다. $slice는 [건너뛸 개수, 표시할 개수] 형태로 인자를 받아, 배열의 앞부분을 무시한 뒤 원하는 만큼의 값만 반환합니다.
이번 글에서는 배열의 처음 4개 값을 건너뛰고 다음 3개 값만 표시하는 방법을 예제와 함께 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 demo693이라는 컬렉션을 생성하고 Values라는 배열 필드를 가진 문서들을 삽입합니다.
> db.demo693.insertOne({Values:[10,746,736,283,7363,424,3535]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea58a04ece4e5779399c07b")
}
> db.demo693.insertOne({Values:[100,200,300,100,500,700,900,30000,40003,45999]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea58a1eece4e5779399c07c")
}2. 전체 문서 확인하기
find() 메서드를 사용해 컬렉션의 모든 문서를 조회해 보겠습니다.
> db.demo693.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5ea58a04ece4e5779399c07b"), "Values" : [ 10, 746, 736, 283, 7363, 424, 3535 ] }
{ "_id" : ObjectId("5ea58a1eece4e5779399c07c"), "Values" : [ 100, 200, 300, 100, 500, 700, 900, 30000, 40003, 45999 ] }3. $slice로 처음 4개 값 건너뛰기
이제 $slice 연산자를 사용하여 배열의 처음 4개 값을 무시하고 그다음 3개 값만 표시하는 쿼리를 작성해 보겠습니다.
> db.demo693.find({},{Values:{$slice:[4,3]}});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ea58a04ece4e5779399c07b"), "Values" : [ 7363, 424, 3535 ] }
{ "_id" : ObjectId("5ea58a1eece4e5779399c07c"), "Values" : [ 500, 700, 900 ] }$slice 동작 원리 정리
$slice에 [4, 3]을 전달하면 첫 번째 값인 4는 배열 앞에서 건너뛸 요소의 개수를, 두 번째 값인 3은 반환할 요소의 개수를 의미합니다. 따라서 첫 번째 문서에서는 10, 746, 736, 283이 제외되고 7363, 424, 3535가 반환되었으며, 두 번째 문서에서는 100, 200, 300, 100이 제외되고 500, 700, 900이 반환된 것을 확인할 수 있습니다.
참고로 $slice에는 단일 숫자도 사용할 수 있습니다. 양수 n을 지정하면 배열의 처음 n개 요소를, 음수 -n을 지정하면 마지막 n개 요소를 반환합니다. 이처럼 $slice를 활용하면 별도의 데이터 가공 없이 쿼리 단계에서 원하는 배열 구간만 손쉽게 가져올 수 있습니다.