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

MongoDB에서 특정 값의 개수 빠르게 조회하는 방법

MongoDB에서 특정 값의 개수 빠르게 조회하는 방법

데이터가 많은 컬렉션에서 특정 값의 개수를 조회할 때는 인덱스(index)를 미리 생성해 두면 쿼리 성능을 크게 향상시킬 수 있습니다. 개수를 구할 때는 count() 메서드를 사용하면 됩니다. 아래 예제를 통해 전체 과정을 살펴보겠습니다.

1. 인덱스 생성 및 샘플 데이터 입력

먼저 Name 필드에 오름차순(1) 인덱스를 생성합니다.

> db.demo311.ensureIndex({"Name":1});
{
   "createdCollectionAutomatically" : true,
   "numIndexesBefore" : 1,
   "numIndexesAfter" : 2,
   "ok" : 1
}

이어서 demo311 컬렉션에 여러 개의 문서(document)를 삽입합니다.

> db.demo311.insertOne({"Name":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50cd01f8647eb59e562044")
}
> db.demo311.insertOne({"Name":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50cd05f8647eb59e562045")
}
> db.demo311.insertOne({"Name":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50cd06f8647eb59e562046")
}
> db.demo311.insertOne({"Name":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50cd0af8647eb59e562047")
}
> db.demo311.insertOne({"Name":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50cd0df8647eb59e562048")
}
> db.demo311.insertOne({"Name":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e50cd0ff8647eb59e562049")
}

2. 컬렉션의 전체 문서 확인하기

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

> db.demo311.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e50cd01f8647eb59e562044"), "Name" : "Chris" }
{ "_id" : ObjectId("5e50cd05f8647eb59e562045"), "Name" : "David" }
{ "_id" : ObjectId("5e50cd06f8647eb59e562046"), "Name" : "David" }
{ "_id" : ObjectId("5e50cd0af8647eb59e562047"), "Name" : "Chris" }
{ "_id" : ObjectId("5e50cd0df8647eb59e562048"), "Name" : "Bob" }
{ "_id" : ObjectId("5e50cd0ff8647eb59e562049"), "Name" : "Chris" }

3. 특정 값의 개수 구하기

다음과 같이 조건을 지정한 뒤 count()를 호출하면 해당 값의 개수를 즉시 얻을 수 있습니다.

> db.demo311.find({"Name":"Chris"}).count();

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

3

결과를 통해 Name 필드가 "Chris"인 문서가 총 3개 존재함을 확인할 수 있습니다. 인덱스가 설정되어 있기 때문에 대용량 데이터에서도 빠른 속도로 개수를 집계할 수 있습니다.

참고 사항

MongoDB 3.0 이상 버전에서는 ensureIndex()가 deprecated(사용 중단 권고)되었으므로, 대신 createIndex()를 사용하는 것이 좋습니다. 또한 정확한 개수만 필요하다면 countDocuments()estimatedDocumentCount() 같은 최신 카운트 메서드를 활용하는 것도 고려해 볼 수 있습니다.