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

MongoDB 배열에서 특정 요소를 가져오는 방법

MongoDB에서 배열에 저장된 여러 값 중 특정 위치의 요소만 필요한 경우가 자주 있습니다. 이럴 때 애그리게이션(Aggregation) 프레임워크$arrayElemAt 연산자를 사용하면 원하는 요소를 간단하게 추출할 수 있습니다.

1. 예시용 컬렉션 생성하기

개념을 쉽게 이해하기 위해 먼저 문서가 포함된 컬렉션을 생성해 보겠습니다. 아래 쿼리를 실행하면 강사 이름과 기술 과목 배열을 가진 문서가 저장됩니다.

> db.getParticularElement.insertOne({"InstructorName":"Larry","InstructorTechnicalSubject":["Java","C","C++","MongoDB","MySQL","SQL Server"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c7ee027559dd2396bcfbfb1")
}

2. 저장된 문서 확인하기

find() 메서드와 pretty() 함수를 함께 사용하면 컬렉션의 모든 문서를 보기 좋은 형태로 출력할 수 있습니다.

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

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

{
   "_id" : ObjectId("5c7ee027559dd2396bcfbfb1"),
   "InstructorName" : "Larry",
   "InstructorTechnicalSubject" : [
      "Java",
      "C",
      "C++",
      "MongoDB",
      "MySQL",
      "SQL Server"
   ]
}

3. $arrayElemAt으로 특정 요소 가져오기

이제 애그리게이션 파이프라인의 $project 단계에서 $arrayElemAt 연산자를 사용해 배열의 네 번째 요소(인덱스 3)를 추출해 보겠습니다.

> db.getParticularElement.aggregate([
   {
      $project:
      {
         FourthElement: { $arrayElemAt: [ "$InstructorTechnicalSubject", 3] }
      }
   }
]);

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

{ "_id" : ObjectId("5c7ee027559dd2396bcfbfb1"), "FourthElement" : "MongoDB" }

$arrayElemAt 연산자 핵심 정리

  • 0부터 시작하는 인덱스: 첫 번째 요소는 인덱스 0입니다. 따라서 네 번째 요소를 얻으려면 인덱스 3을 지정해야 합니다.
  • 음수 인덱스 지원: 음수 값을 사용하면 배열의 끝에서부터 역순으로 계산합니다. 예를 들어 -1은 마지막 요소를 반환합니다.
  • 범위 초과 시: 지정한 인덱스가 배열 범위를 벗어나면 결과가 반환되지 않습니다.

이처럼 $arrayElemAt 연산자를 활용하면 별도의 복잡한 로직 없이도 MongoDB 배열에서 원하는 위치의 요소를 효율적으로 조회할 수 있습니다.