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

MongoDB 컬렉션에 인덱스를 생성하는 방법 완벽 가이드

MongoDB 인덱스 생성이란?

MongoDB에서 인덱스를 생성하려면 createIndex() 메서드를 사용합니다. 인덱스는 특정 필드 값을 기준으로 데이터를 빠르게 검색할 수 있도록 해주는 핵심 기능으로, 대용량 컬렉션에서 쿼리 성능을 크게 향상시킵니다.

이번 글에서는 문서가 포함된 컬렉션에 인덱스를 생성하고, 데이터를 삽입한 뒤 조회까지 확인하는 전체 과정을 예제와 함께 살펴보겠습니다.

1단계: createIndex()로 인덱스 생성하기

먼저 details.id 필드에 오름차순(1) 인덱스를 생성합니다. 이때 컬렉션이 아직 존재하지 않더라도 MongoDB가 자동으로 컬렉션을 생성해 주므로 별도의 사전 작업이 필요하지 않습니다.

> db.demo702.createIndex({"details.id":1});
{
   "createdCollectionAutomatically" : true,
   "numIndexesBefore" : 1,
   "numIndexesAfter" : 2,
   "ok" : 1
}

실행 결과를 보면 createdCollectionAutomatically 항목이 true로 표시되어, demo702 컬렉션이 자동으로 생성되었음을 확인할 수 있습니다. 또한 모든 컬렉션에 기본적으로 존재하는 _id 인덱스(1개)에 새 인덱스가 추가되어, 전체 인덱스 수가 2개(numIndexesAfter)가 되었습니다.

2단계: insertOne()으로 문서 삽입하기

이제 insertOne() 메서드를 사용하여 학생 정보를 담고 있는 배열 형태의 details 필드를 가진 문서를 삽입합니다.

> db.demo702.insertOne({
...    "details" : [
...       {
...          id:101,
...          studentInfo:{
...              "StudentName" : "Chris",
...              "StudentAge" : 23
...          }
...       },
...    {
...       id: 102,
...       studentInfo:{
...          "StudentName" : "Robert",
...          "StudentAge" : 20
...       }
...    }
... ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6ea3b551299a9f98c93b3")
}

삽입이 성공하면 acknowledged 값이 true로 반환되며, MongoDB가 자동으로 부여한 고유 식별자인 ObjectId도 함께 확인할 수 있습니다.

3단계: find() 메서드로 저장된 문서 조회하기

컬렉션의 모든 문서를 조회하려면 find() 메서드를 사용합니다. 여기에 pretty() 메서드를 함께 호출하면 결과가 들여쓰기된 보기 좋은 형태로 출력됩니다.

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

위 명령을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

{
   "_id" : ObjectId("5ea6ea3b551299a9f98c93b3"),
   "details" : [
      {
         "id" : 101,
         "studentInfo" : {
             "StudentName" : "Chris",
             "StudentAge" : 23
         }
      },
      {
         "id" : 102,
         "studentInfo" : {
             "StudentName" : "Robert",
             "StudentAge" : 20
         }
      }
   ]
}

마무리 정리

지금까지 MongoDB 컬렉션에서 인덱스를 생성하는 과정을 단계별로 살펴보았습니다. 핵심 내용을 요약하면 다음과 같습니다.

- createIndex({필드: 1}): 지정한 필드에 오름차순 인덱스를 생성하며, -1을 사용하면 내림차순 인덱스가 됩니다.
- 컬렉션 자동 생성: 인덱스 생성 시점에 컬렉션이 없어도 자동으로 만들어집니다.
- _id 인덱스: 모든 컬렉션에는 기본 _id 인덱스가 존재하므로 인덱스 개수가 하나 더 집계됩니다.
- find().pretty(): 저장된 문서를 사람이 읽기 쉬운 형태로 조회할 수 있습니다.

배열 내부의 중첩 필드(예: details.id)에도 인덱스를 생성할 수 있으므로, 복잡한 문서 구조에서도 효율적인 쿼리 성능을 확보할 수 있습니다.