db.collection.count()
정의
db.collection.count(query, options)
중요
Mongo쉬 방법
이 페이지에서는
mongosh
메서드를 설명합니다. 이는 데이터베이스 명령 또는 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다.데이터베이스 명령의 경우
count
명령을 참조하세요.MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.
참고
4.0 기능과 호환되는 MongoDB 드라이버는
countDocuments()
및estimatedDocumentCount()
에 대한 새로운 API를 위해 각각의 커서 및 컬렉션count()
API를 더 이상 사용하지 않습니다. 특정 드라이버의 구체적인 API 이름은 드라이버 설명서를 참조하세요.collection 또는 뷰에 대한
find()
쿼리와 일치하는 문서 수를 반환합니다.db.collection.count()
메서드는find()
작업을 수행하지 않고 대신 쿼리와 일치하는 결과 수를 계산하여 반환합니다.
호환성
이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M0, M2 및 M5 클러스터에서 제한적으로 지원 됩니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
이 메서드는 다음 매개변수를 사용합니다.
Parameter | 유형 | 설명 |
---|---|---|
query | 문서 | 쿼리 선택 기준입니다. |
options | 문서 | 선택 사항. 개수 수정을 위한 추가 옵션입니다. |
options
문서에 다음과 같은 필드가 있습니다:
필드 | 유형 | 설명 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
limit | integer | 선택 사항입니다. 계산할 최대 문서 수입니다. | ||||||||||
skip | integer | 선택 사항. 계산하기 전에 건너뛸 문서 수입니다. | ||||||||||
hint | 문자열 또는 문서 | 선택 사항입니다. 쿼리에 대한 인덱스 이름 힌트 또는 사양입니다. | ||||||||||
maxTimeMS | integer | 선택 사항입니다. 쿼리 실행을 허용하는 최대 시간입니다. | ||||||||||
readConcern | 문자열 | 선택 사항입니다. 읽기 고려를 지정합니다. 기본 수준은 단일 스레드가 자신의 쓰기를 읽을 수 있도록 하려면 복제본 세트의 프라이머리에 대해 읽기 고려 수준 | ||||||||||
collation | 문서 | 선택 사항. 작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다. 데이터 정렬 옵션의 구문은 다음과 같습니다:
데이터 정렬을 지정할 때 데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( 컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다. 한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다. |
count()
는 db.collection.find(query).count()
구성과 동일합니다.
행동
쿼리 조건자가 없는 부정확한 카운트
쿼리 조건자 없이 count()
를 호출하면 정확하지 않은 수의 문서를 수신할 수 있습니다. 쿼리 조건자가 없으면 count()
메서드는 컬렉션의 메타데이터를 기반으로 결과를 반환하므로 대략적인 개수가 나올 수 있습니다. 특히
샤딩된 클러스터에서는 결과 개수가 고아 문서를 제대로 필터링하지 못합니다.
비정상 종료 또는 파일 복사본 기반의 초기 동기화 후에는 개수가 부정확할 수 있습니다.
컬렉션 메타데이터를 기반으로 한 카운트에 대해서는 카운트 옵션이 있는 collStats 파이프라인 단계를 참조하세요.
카운트 및 트랜잭션
트랜잭션에서는 count
와 셸 헬퍼 count()
및 db.collection.count()
를 사용할 수 없습니다.
자세한 내용은 트랜잭션 및 카운트 작업을 참조하세요.
샤딩된 클러스터
샤딩된 클러스터에서 쿼리 조건자가 없는 db.collection.count()
는 고아 문서가 존재하거나 청크 마이그레이션이 진행 중인 경우 개수가 부정확할 수 있습니다.
이러한 상황을 방지하려면 샤딩된 클러스터에서 다음과 같이 db.collection.aggregate()
메서드를 사용합니다.
$count
단계를 사용하여 문서 수를 계산할 수 있습니다. 예를 들어 다음 작업에서는 collection의 문서 수를 계산합니다.
db.collection.aggregate( [ { $count: "myCount" } ])
$count
단계는 다음 $group
+ $project
시퀀스와 동일합니다.
db.collection.aggregate( [ { $group: { _id: null, count: { $sum: 1 } } }, { $project: { _id: 0 } } ] )
인덱스 사용하기
다음 인덱스가 있는 collection을 생각해 보겠습니다.
{ a: 1, b: 1 }
개수를 셀 때 MongoDB는 다음과 같은 경우 인덱스만 사용하여 개수를 반환할 수 있습니다.
이 쿼리로 인덱스를 사용할 수 있고,
쿼리에는 인덱스의 키에 대한 조건만 포함되어 있습니다. 그리고
쿼리 조건자가 연속된 단일 범위의 인덱스 키에 액세스합니다.
예를 들어 다음 작업은 인덱스만 사용하여 개수를 반환할 수 있습니다.
db.collection.find( { a: 5, b: 5 } ).count() db.collection.find( { a: { $gt: 5 } } ).count() db.collection.find( { a: 5, b: { $gt: 10 } } ).count()
그러나 쿼리가 인덱스를 사용할 수 있지만 쿼리 조건자가 단일 연속 범위의 인덱스 키에 액세스하지 않거나 쿼리에 인덱스 외부 필드에 대한 조건도 포함된 경우에는 인덱스를 사용하는 것 외에도 MongoDB가 문서를 읽어야만 개수를 반환할 수 있습니다.
db.collection.find( { a: 5, b: { $in: [ 1, 2, 3 ] } } ).count() db.collection.find( { a: { $gt: 5 }, b: 5 } ).count() db.collection.find( { a: 5, b: 5, c: 5 } ).count()
이러한 경우 문서를 처음 읽는 동안 MongoDB는 동일한 개수 작업의 후속 호출이 더 나은 성능을 갖도록 문서를 메모리로 페이징합니다.
예기치 않은 종료 후 정확도
Wired Tiger 스토리지 엔진을 사용하여 mongod
를 비정상적으로 종료한 후에는 count()
에서 보고한 크기 통계가 정확하지 않을 수 있습니다.
편차의 정도는 마지막 체크포인트와 비정상 종료 사이에 수행된 삽입, 업데이트 또는 삭제 작업의 수에 따라 달라집니다. 체크포인트는 보통 60초마다 발생합니다. 그러나mongod
기본값이 아닌 --syncdelay
설정으로 실행되는 인스턴스는 체크포인트가 다소 빈번하게 발생할 수 있습니다.
mongod
의 각 컬렉션에서 validate
를 실행하여 비정상 종료 후 통계를 복원합니다.
비정상 종료 후
참고
이 정확도 손실은 쿼리 조건자를 포함하지 않는 count()
작업에만 적용됩니다.
클라이언트 연결 해제
MongoDB 4.2부터 db.collection.count()
를 발급한 클라이언트가 작업이 완료되기 전에 연결을 끊는 경우, MongoDB는 db.collection.count()
를 사용하여 를killOp
을 종료로 표시합니다.
예시
컬렉션의 모든 문서 수 계산
orders
컬렉션의 모든 문서 수를 계산하려면 다음 작업을 사용합니다.
db.orders.count()
이 작업은 다음과 같습니다.
db.orders.find().count()
쿼리와 일치하는 모든 문서 수 세기
ord_dt
필드가 new
Date('01/01/2012')
보다 큰 orders
컬렉션에 있는 문서 수를 계산합니다.
db.orders.count( { ord_dt: { $gt: new Date('01/01/2012') } } )
쿼리는 다음과 동일합니다.
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()