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

MongoDB 집계 프레임워크에서 $slice로 배열의 특정 위치 요소 가져오기

MongoDB $slice 연산자로 배열의 특정 위치 요소 추출하기

MongoDB에서 배열 필드 안에 있는 특정 위치의 요소만 조회하고 싶다면 집계 프레임워크(Aggregate Framework)와 함께 $slice 연산자를 사용하면 됩니다. $slice는 세 개의 인자를 받습니다.

  • 대상 배열: 값을 추출할 배열 필드
  • 건너뛸 개수(position): 어느 위치부터 시작할지 지정 (0부터 시작)
  • 반환할 요소 수(n): 해당 위치부터 몇 개의 요소를 가져올지 지정

실제 동작 과정을 예제를 통해 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 생성

먼저 문서가 포함된 컬렉션을 생성합니다.

> db.exactPositionDemo.insertOne({"StudentName":"John","StudentScores":[78,98,56,45,89]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd29a1c345990cee87fd883")
}

2단계: 저장된 문서 확인

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

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

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

{
   "_id" : ObjectId("5cd29a1c345990cee87fd883"),
   "StudentName" : "John",
   "StudentScores" : [
      78,
      98,
      56,
      45,
      89
   ]
}

케이스 1: 첫 번째 요소 가져오기 — $slice: [배열, 0, 1]

$slice에 시작 위치를 0, 반환 개수를 1로 지정하면 배열의 첫 번째 요소를 얻을 수 있습니다.

> db.exactPositionDemo.aggregate([ { "$project": { "StudentScores": { "$slice": ["$StudentScores",0,1] } }} ]);

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

{ "_id" : ObjectId("5cd29a1c345990cee87fd883"), "StudentScores" : [ 78 ] }

케이스 2: 두 번째 요소 가져오기 — $slice: [배열, 1, 1]

이번에는 시작 위치를 1, 반환 개수를 1로 지정해 보겠습니다. 이렇게 하면 배열의 두 번째 요소가 반환됩니다.

> db.exactPositionDemo.aggregate([ { "$project": { "StudentScores": { "$slice": ["$StudentScores",1,1] } }} ]);

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

{ "_id" : ObjectId("5cd29a1c345990cee87fd883"), "StudentScores" : [ 98 ] }

정리

이처럼 $project 단계에서 $slice를 활용하면 배열 전체가 아닌 원하는 위치의 값만 정확하게 프로젝션할 수 있습니다. 시작 위치(offset)와 반환 개수(count)를 조절하면 배열의 임의 구간도 손쉽게 추출할 수 있어, 대용량 배열 데이터에서 필요한 부분만 효율적으로 조회할 때 매우 유용합니다.