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

MongoDB 배열 인덱싱 방법: 멀티키 인덱스로 개별 요소 조회하기

MongoDB 배열 인덱싱의 원리

MongoDB는 배열 필드의 모든 값을 개별적으로 인덱싱하는 멀티키(Multikey) 인덱스 방식을 사용합니다. 덕분에 배열 전체가 아닌 특정 요소 하나만으로도 해당 문서를 빠르게 조회할 수 있습니다.

1단계: 예제 컬렉션 생성

개념을 이해하기 위해 먼저 배열 필드를 가진 문서로 컬렉션을 생성해 보겠습니다. 다음 쿼리를 실행합니다.

> db.indexingForArrayElementDemo.insertOne({"StudentFavouriteSubject":["MongoDB","MySQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8acdca6cea1f28b7aa0816")
}

2단계: 저장된 문서 확인

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

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

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

{
   "_id" : ObjectId("5c8acdca6cea1f28b7aa0816"),
   "StudentFavouriteSubject" : [
      "MongoDB",
      "MySQL"
   ]
}

3단계: 배열 필드에 인덱스 생성

아래 쿼리로 배열 필드에 인덱스를 생성합니다. 참고로 ensureIndex()는 현재 사용이 권장되지 않는(deprecated) 메서드이므로, 최신 버전의 MongoDB에서는 createIndex()를 사용하는 것이 좋습니다.

> db.indexingForArrayElementDemo.ensureIndex({"StudentFavouriteSubject":1});

인덱스가 정상적으로 생성되면 다음과 같은 결과가 출력됩니다.

{
   "createdCollectionAutomatically" : false,
   "numIndexesBefore" : 1,
   "numIndexesAfter" : 2,
   "ok" : 1
}

4단계: 개별 배열 요소로 쿼리 실행

이제 생성된 인덱스를 활용하여 배열의 개별 요소를 조건으로 문서를 조회할 수 있습니다.

> db.indexingForArrayElementDemo.find({"StudentFavouriteSubject":"MongoDB"}).pretty();

"MongoDB"를 조건으로 조회한 결과입니다.

{
   "_id" : ObjectId("5c8acdca6cea1f28b7aa0816"),
   "StudentFavouriteSubject" : [
      "MongoDB",
      "MySQL"
   ]
}

같은 방식으로 "MySQL" 요소를 조건으로도 조회할 수 있습니다.

> db.indexingForArrayElementDemo.find({"StudentFavouriteSubject":"MySQL"}).pretty();

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

{
   "_id" : ObjectId("5c8acdca6cea1f28b7aa0816"),
   "StudentFavouriteSubject" : [
      "MongoDB",
      "MySQL"
   ]
}

정리

MongoDB는 배열 필드에 인덱스를 생성하면 내부적으로 멀티키 인덱스를 구성하여 각 배열 요소마다 인덱스 항목을 만듭니다. 따라서 별도의 추가 설정 없이도 배열의 특정 요소를 조건으로 하는 쿼리를 인덱스를 통해 빠르게 처리할 수 있습니다.