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

MongoDB에서 배열 하위 요소를 제한하는 방법 – $slice 연산자 완벽 가이드

MongoDB에서 배열에 저장된 요소의 개수를 제한하고 싶을 때는 $slice 연산자를 사용하면 됩니다. $slice는 find() 메서드의 프로젝션(projection) 단계에서 활용되며, 배열의 처음 또는 마지막에서 원하는 개수만큼의 요소만 조회할 수 있게 해줍니다.

실제 예제를 통해 살펴보겠습니다. 먼저 문서가 포함된 컬렉션을 생성합니다.

1. 샘플 컬렉션 생성하기

아래 쿼리는 플레이어 정보와 게임 점수 배열을 포함한 문서를 삽입합니다.

> db.limitAnArrayDemo.insertOne(
...    {
...       _id: 101,
...       "PlayerName": "Bob",
...       "PlayerDetails": {Age:23,isStudent:true},
...       "PlayerGameScores": [234,5767,58,67,78,90,1002,576,68,45,23,45,678,89,78]
...    }
... );
{ "acknowledged" : true, "insertedId" : 101 }

2. 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

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

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : 101,
   "PlayerName" : "Bob",
   "PlayerDetails" : {
      "Age" : 23,
      "isStudent" : true
   },
   "PlayerGameScores" : [
      234,
      5767,
      58,
      67,
      78,
      90,
      1002,
      576,
      68,
      45,
      23,
      45,
      678,
      89,
      78
   ]
}

현재 PlayerGameScores 배열에는 총 15개의 점수가 저장되어 있습니다.

3. $slice로 배열 요소 개수 제한하기

이제 배열 하위 요소의 개수를 제한해 보겠습니다. 아래 쿼리는 $slice에 음수 값(-10)을 지정하여 배열의 마지막 10개 요소만 반환합니다.

> db.limitAnArrayDemo.find({}, {PlayerName:1, PlayerDetails: 1, PlayerGameScores:{$slice: -10}}).pretty();

실행 결과, 10개의 PlayerGameScores만 출력되는 것을 확인할 수 있습니다.

{
   "_id" : 101,
   "PlayerName" : "Bob",
   "PlayerDetails" : {
      "Age" : 23,
      "isStudent" : true
   },
   "PlayerGameScores" : [
      90,
      1002,
      576,
      68,
      45,
      23,
      45,
      678,
      89,
      78
   ]
}

$slice 동작 방식 정리

  • 양수 값(예: {$slice: 10}): 배열의 처음부터 지정한 개수만큼 요소를 반환합니다.
  • 음수 값(예: {$slice: -10}): 배열의 마지막부터 지정한 개수만큼 요소를 반환합니다.
  • [skip, limit] 형식(예: {$slice: [5, 10]}): 앞의 5개 요소를 건너뛰고(skip), 그 다음 10개 요소를 반환합니다.

이처럼 $slice 연산자를 활용하면 대량의 데이터가 담긴 배열에서 필요한 부분만 효율적으로 가져올 수 있어, 네트워크 전송량을 줄이고 애플리케이션 성능을 개선하는 데 유용합니다.