Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 $slice 연산자로 배열 요소를 슬라이스하는 방법

MongoDB에서 배열의 일부만 조회하고 싶을 때는 $slice 연산자를 사용하면 됩니다. $slice 연산자는 find() 쿼리의 프로젝션 단계에서 배열 필드에 포함될 요소의 개수나 범위를 지정할 수 있게 해줍니다.

예제 컬렉션 생성

먼저 문서가 담긴 컬렉션을 생성해 보겠습니다.

> db.demo503.insertOne({_id:1,Name:"John",Subject:["MySQL","Java","C"]});
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo503.insertOne({_id:2,Name:"David",Subject:["MongoDB","C++","Python"]});
{ "acknowledged" : true, "insertedId" : 2 }

find() 메서드로 전체 문서 확인

find() 메서드를 사용해 컬렉션의 모든 문서를 출력해 보겠습니다.

> db.demo503.find().pretty();

위 쿼리는 다음과 같은 결과를 반환합니다.

{ "_id" : 1, "Name" : "John", "Subject" : [ "MySQL", "Java", "C" ] }
{
    "_id" : 2,
    "Name" : "David",
    "Subject" : [
        "MongoDB",
        "C++",
        "Python"
    ]
}

$slice 연산자로 배열 슬라이스하기

이제 특정 필드의 배열을 슬라이스하는 쿼리를 살펴보겠습니다. 아래 예제에서는 _id가 2인 문서의 Subject 배열에서 마지막 요소 하나만 가져옵니다.

> db.demo503.find({_id:2}, { 'Subject': { $slice: -1 }});

실행 결과는 다음과 같습니다.

{ "_id" : 2, "Name" : "David", "Subject" : [ "Python" ] }

$slice 연산자 사용법 정리

$slice 연산자는 값에 따라 동작 방식이 달라집니다.

  • 양수(n): 배열의 앞에서부터 n개의 요소를 반환합니다. 예: { $slice: 2 }
  • 음수(-n): 배열의 뒤에서부터 n개의 요소를 반환합니다. 위 예제의 { $slice: -1 }은 마지막 요소인 "Python"만 반환했습니다.
  • [skip, limit] 형식: 첫 번째 값만큼 건너뛴 후 두 번째 값만큼의 요소를 반환합니다. 예: { $slice: [1, 2] }는 인덱스 1부터 2개의 요소를 반환합니다.

이처럼 $slice 연산자를 활용하면 대용량 배열 필드에서 필요한 부분만 효율적으로 조회할 수 있어 네트워크 트래픽과 애플리케이션 성능 최적화에 유용합니다.