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

MongoDB에서 필드 제한과 슬라이스($slice) 프로젝션을 함께 사용하는 방법

MongoDB에서 필드 제한과 슬라이스 프로젝션 함께 사용하기

MongoDB에서 특정 필드를 제외하면서 동시에 배열 요소의 일부만 잘라서(slicing) 조회하고 싶다면 $slice 연산자를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 필드 제한과 슬라이스 프로젝션을 함께 적용하는 방법을 단계별로 살펴보겠습니다.

1. 테스트용 컬렉션 생성

먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다.

> db.limitAndSliceProjectionDemo.insertOne(
    {
       "_id" : 101,
       "UserName" : "Carol",
       "UserAge" : 26,
       "UserMesssage" : [
          "Hi",
          "Hello",
          "Bye",
          "Awesome",
          "Good",
          "Bad",
          "Nice",
          "Good Night",
          "Good Morning"
       ]
    }
);
{ "acknowledged" : true, "insertedId" : 101 }

2. 저장된 문서 확인하기

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

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

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

{
   "_id" : 101,
   "UserName" : "Carol",
   "UserAge" : 26,
   "UserMesssage" : [
      "Hi",
      "Hello",
      "Bye",
      "Awesome",
      "Good",
      "Bad",
      "Nice",
      "Good Night",
      "Good Morning"
   ]
}

3. 필드 제한과 슬라이스 프로젝션 동시 적용

이제 핵심 부분입니다. find() 메서드의 두 번째 인수인 프로젝션 옵션에서 제외할 필드는 값으로 0을 지정하고, 배열 필드에는 $slice 연산자를 적용합니다. 아래 예제에서는 [2, 4] 형식으로 지정하여 배열의 인덱스 2번째 요소부터 4개의 메시지만 가져옵니다.

> db.limitAndSliceProjectionDemo.find({ "UserName" : "Carol" }, {"_id": 0, "UserName":0,"UserAge":0, "UserMesssage": { "$slice": [2,4] } }).pretty();

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

{ "UserMesssage" : [ "Bye", "Awesome", "Good", "Bad" ] }

결과 분석

출력 결과를 보면 _id, UserName, UserAge 필드는 완전히 제외되었고, UserMesssage 배열에는 원래 9개의 요소 중 세 번째 요소("Bye")부터 네 개의 요소만 포함된 것을 확인할 수 있습니다.

이처럼 MongoDB에서는 프로젝션 내에서 일반 필드 제외(0)와 $slice 연산자를 조합함으로써, 필요한 데이터만 정확히 추출하여 애플리케이션 성능과 응답 크기를 최적화할 수 있습니다.