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

MongoDB에서 전체 배열에 대한 멀티키(Multikey) 인덱싱 구현하는 방법

MongoDB에서 전체 배열에 대한 멀티키 인덱싱 구현하기

MongoDB에서 배열 필드를 대상으로 인덱스를 생성하면 자동으로 멀티키(multikey) 인덱스가 적용됩니다. 이번 글에서는 배열 형태의 문서를 가진 컬렉션을 만들고, 배열 전체에 대한 조회 및 인덱싱 동작을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 문서를 포함하는 컬렉션을 생성해 보겠습니다.

> db.demo277.insertOne({"details":[{"FirstName":"John"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e48fb21dd099650a5401a52")
}
> db.demo277.insertOne({"details":[{"FirstName":"David"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e48fb27dd099650a5401a53")
}
> db.demo277.insertOne({"details":[{"FirstName":"Chris"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e48fb2bdd099650a5401a54")
}

2. find() 메서드로 전체 문서 조회

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

> db.demo277.find();

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

{ "_id" : ObjectId("5e48fb21dd099650a5401a52"), "details" : [ { "FirstName" : "John" } ] }
{ "_id" : ObjectId("5e48fb27dd099650a5401a53"), "details" : [ { "FirstName" : "David" } ] }
{ "_id" : ObjectId("5e48fb2bdd099650a5401a54"), "details" : [ { "FirstName" : "Chris" } ] }

3. 배열 전체에 대한 조회 쿼리 실행

다음은 배열 전체를 기준으로 조건을 지정해 문서를 조회하는 쿼리입니다. 이처럼 배열 전체에 대한 조건 검색은 멀티키 인덱싱과 연관되어 동작하며, 조건에 따라 전체 문서를 스캔할 수 있습니다.

> db.demo277.find({"details":{FirstName:"David"}});

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

{ "_id" : ObjectId("5e48fb27dd099650a5401a53"), "details" : [ { "FirstName" : "David" } ] }

정리

MongoDB는 배열 필드에 인덱스를 걸면 각 배열 요소마다 별도의 인덱스 항목을 생성하는 멀티키 인덱스를 지원합니다. 다만 위 예제처럼 배열 전체를 정확히 일치(exact match)시키는 조건으로 조회할 경우, 의도한 대로 인덱스가 활용되지 않고 전체 문서 스캔이 발생할 수 있으므로 주의가 필요합니다. 성능 최적화를 위해서는 "details.FirstName"처럼 점 표기법(dot notation)으로 하위 필드를 직접 지정해 인덱스를 생성하고 조회하는 것이 권장됩니다.