MongoDB에서 배열 필드의 특정 개수 항목만 가져오고 싶다면 $slice 연산자를 사용하면 됩니다. 이 연산자는 전체 배열이 아닌 원하는 개수의 요소만 반환해 주기 때문에, 대용량 배열 데이터를 다룰 때 특히 유용합니다.
1. 샘플 컬렉션 생성하기
먼저 문서가 포함된 컬렉션을 생성하겠습니다.
> db.demo48.insertOne({"Name":["David","Chris","Sam","Mike","Carol"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e270491cfb11e5c34d89901")
}위 쿼리는 'Name'이라는 배열 필드에 5개의 이름 값을 가진 문서 하나를 demo48 컬렉션에 삽입합니다.
2. find()로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo48.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e270491cfb11e5c34d89901"), "Name" : [ "David", "Chris", "Sam", "Mike", "Carol" ] }현재 'Name' 배열에는 5개의 값이 모두 포함되어 있는 것을 볼 수 있습니다.
3. $slice로 특정 개수의 항목만 가져오기
이제 배열에서 처음 2개의 항목만 조회하는 쿼리를 작성해 보겠습니다.
> db.demo48.find({},{Name:{$slice: 2}});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e270491cfb11e5c34d89901"), "Name" : [ "David", "Chris" ] }$slice 활용 팁
$slice 연산자는 양수뿐 아니라 음수도 사용할 수 있습니다.
- $slice: 2 — 배열의 처음 2개 항목을 반환합니다.
- $slice: -2 — 배열의 마지막 2개 항목을 반환합니다.
- $slice: [skip, limit] 형태를 사용하면 건너뛸 항목 수와 반환할 항목 수를 함께 지정할 수 있습니다. 예를 들어
{$slice: [1, 2]}는 첫 번째 항목을 건너뛴 뒤 2개의 항목을 반환합니다.
이처럼 $slice 연산자를 활용하면 클라이언트로 전송되는 데이터 크기를 줄이고, 필요한 데이터만 효율적으로 조회할 수 있습니다.