MongoDB에서 배열의 특정 개수 요소만 조회하기
MongoDB에서 배열 필드에 담긴 값 중 원하는 개수만큼의 요소만 반환하고 싶다면 aggregate() 메서드와 $slice 연산자를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 컬렉션 생성 및 문서 삽입
먼저 이름 6개가 들어 있는 배열을 가진 문서를 컬렉션에 삽입합니다.
> db.demo75.insertOne({"Name":["Sam","Mike","Carol","David","Bob","John"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bcd7671bf0181ecc42278")
}2단계: find()로 전체 문서 확인
find() 메서드를 사용해 컬렉션의 모든 문서를 조회합니다.
> db.demo75.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e2bcd7671bf0181ecc42278"), "Name" : [ "Sam", "Mike", "Carol", "David", "Bob", "John" ] }3단계: $slice로 원하는 개수만큼 요소 가져오기
이제 aggregate() 파이프라인 안에서 $project와 $slice를 조합해 배열의 일부만 잘라내 보겠습니다.
> db.demo75.aggregate([ { $project: { Name: { $slice: [ "$Name", 4 ] } } } ]);실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e2bcd7671bf0181ecc42278"), "Name" : [ "Sam", "Mike", "Carol", "David" ] }결과 분석
$slice에 [ "$Name", 4 ]처럼 배열과 숫자를 전달하면 배열의 처음부터 4개의 요소만 잘라내어 반환합니다. 출력 결과를 보면 "Sam", "Mike", "Carol", "David" 네 개의 요소만 포함된 것을 확인할 수 있습니다.
참고로 음수 값을 지정하면(예: [ "$Name", -4 ]) 배열의 끝에서부터 요소를 가져올 수 있으며, [ offset, count ] 형태로 건너뛸 위치와 개수를 함께 지정하는 것도 가능합니다. 대용량 배열 데이터에서 필요한 부분만 효율적으로 조회할 때 매우 유용한 기법입니다.