카운트
정의
count
컬렉션 또는 보기 화면에 있는 문서 수를 계산합니다. 이 개수와 명령 상태가 포함된 문서를 반환합니다.
팁
참고
4.0 기능과 호환되는 MongoDB 드라이버는
countDocuments()
및estimatedDocumentCount()
에 해당하는 새로운 API를 위해 각각의 커서 및 컬렉션count()
API(count
명령 실행)를 더 이상 사용하지 않습니다. 특정 드라이버의 구체적인 API 이름은 드라이버 API 설명서를 참조하세요. 특정 드라이버의 구체적인 API 이름은 드라이버 API 설명서를 참조하세요.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M0, M2 및 M5 클러스터에서 제한적으로 지원 됩니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
명령은 다음과 같은 구문을 가집니다:
참고
버전 4.2부터 MongoDB는 count
명령의 옵션 이름에 대해 더 엄격한 유효성 검사를 구현합니다. 이제 알 수 없는 옵션 이름을 지정하면 명령에 오류가 발생합니다.
db.runCommand( { count: <collection or view>, query: <document>, limit: <integer>, skip: <integer>, hint: <hint>, readConcern: <document>, maxTimeMS: <integer>, collation: <document>, comment: <any> } )
명령 필드
count
에는 다음과 같은 필드가 있습니다:
필드 | 유형 | 설명 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| 문자열 | 계산할 컬렉션 또는 보기의 이름입니다. | ||||||||||
| 문서 | 선택 사항입니다. 컬렉션 또는 보기에서 집계할 문서를 선택하는 쿼리입니다. | ||||||||||
| integer | 선택 사항. 반환할 일치 문서의 최대 개수입니다. | ||||||||||
| integer | 선택 사항입니다. 결과를 반환하기 전에 건너뛸 일치하는 문서의 수입니다. | ||||||||||
| 문자열 또는 문서 | 선택 사항입니다. 사용할 인덱스입니다. 인덱스 이름을 문자열로 지정하거나 인덱스 사양 문서로 지정합니다. | ||||||||||
| 문서 | 선택 사항입니다. 읽기 고려를 지정합니다. 이 옵션의 구문은 다음과 같습니다:
가능한 읽기 고려 수준은 다음과 같습니다.
읽기 고려 수준에 대한 자세한 내용은 읽기 고려 수준을 참조하세요. | ||||||||||
| non-negative integer | 선택 사항. 시간 제한을 밀리초 단위로 지정합니다. MongoDB는 | ||||||||||
| 문서 | 선택 사항. 작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다. 데이터 정렬 옵션의 구문은 다음과 같습니다:
데이터 정렬을 지정할 때 데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( 컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다. 한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다. | ||||||||||
| any | 선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.
댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다. |
Stable API 지원
MongoDB 6.0부터 count
명령은 Stable API V1에 포함되어 있습니다. Stable API에서 count
명령을 사용하려면 MongoDB 6.0 이상을 실행하는 배포에 드라이버를 연결해야 합니다.
행동
쿼리 조건자가 없는 부정확한 카운트
쿼리 조건자 없이 count
를 호출하면 정확하지 않은 수의 문서를 수신할 수 있습니다. 쿼리 조건자가 없으면 count
명령은 컬렉션의 메타데이터를 기반으로 결과를 반환하므로 대략적인 개수 결과를 보여 줄 수 있습니다. 특히
샤딩된 클러스터에서는 결과 개수가 고아 문서를 제대로 필터링하지 못합니다.
비정상 종료 또는 파일 복사본 기반의 초기 동기화 후에는 개수가 부정확할 수 있습니다.
컬렉션 메타데이터를 기반으로 한 카운트에 대해서는 카운트 옵션이 있는 collStats 파이프라인 단계를 참조하세요.
카운트 및 트랜잭션
트랜잭션에서 count
를 사용하면 결과 개수는 커밋되지 않은 다중 문서 트랜잭션을 필터링하지 않습니다.
자세한 내용은 트랜잭션 및 카운트 작업을 참조하세요.
정확도 및 샤딩된 클러스터
샤딩된 클러스터에서 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 } } ] )
예기치 않은 종료 후 정확도
Wired Tiger 스토리지 엔진을 사용하여 mongod
를 비정상적으로 종료한 후에는 count
에서 보고한 크기 통계가 정확하지 않을 수 있습니다.
편차의 정도는 마지막 체크포인트와 비정상 종료 사이에 수행된 삽입, 업데이트 또는 삭제 작업의 수에 따라 달라집니다. 체크포인트는 보통 60초마다 발생합니다. 그러나mongod
기본값이 아닌 --syncdelay
설정으로 실행되는 인스턴스는 체크포인트가 다소 빈번하게 발생할 수 있습니다.
mongod
의 각 컬렉션에서 validate
를 실행하여 비정상 종료 후 통계를 복원합니다.
비정상 종료 후
참고
이 정확도 손실은 쿼리 문서를 포함하지 않는 count
작업에만 적용됩니다.
클라이언트 연결 해제
MongoDB 4.2부터 count
를 발급한 클라이언트가 작업이 완료되기 전에 연결을 끊는 경우, MongoDB는 count
를 사용하여 를killOp
을 종료로 표시합니다.
예시
다음 섹션에서는 count
명령의 예시를 제공합니다.
모든 문서 계산
다음 연산은 orders
컬렉션에 있는 모든 문서의 개수를 계산합니다.
db.runCommand( { count: 'orders' } )
결과에서 개수를 나타내는 n
은 26
이고 명령 상태 ok
는 1
입니다.
{ "n" : 26, "ok" : 1 }
쿼리와 일치하는 문서 수 세기
다음 작업은 ord_dt
필드의 값이 Date('01/01/2012')
보다 큰 orders
컬렉션의 문서 수를 반환합니다.
db.runCommand( { count:'orders', query: { ord_dt: { $gt: new Date('01/01/2012') } } } )
결과에서 개수를 나타내는 n
는 13
이고 명령 상태 ok
는 1
입니다.
{ "n" : 13, "ok" : 1 }
문서 수 건너뛰기
다음 연산은 orders
컬렉션에서 ord_dt
필드 값이 Date('01/01/2012')
보다 큰 문서 수를 반환하고 일치하는 첫 번째 10
문서를 건너뜁니다:
db.runCommand( { count:'orders', query: { ord_dt: { $gt: new Date('01/01/2012') } }, skip: 10 } )
결과에서 개수를 나타내는 n
는 3
이고 명령 상태 ok
는 1
입니다.
{ "n" : 3, "ok" : 1 }
사용할 인덱스 지정
다음 작업에서는 인덱스 { status: 1 }
를 사용하여 ord_dt
필드 값이 Date('01/01/2012')
보다 크고 status
필드 값이 "D"
인 orders
컬렉션의 문서 수를 반환합니다.
db.runCommand( { count:'orders', query: { ord_dt: { $gt: new Date('01/01/2012') }, status: "D" }, hint: { status: 1 } } )
결과에서 개수를 나타내는 n
는 1
이고 명령 상태 ok
는 1
입니다.
{ "n" : 1, "ok" : 1 }
기본 읽기 고려 재정의
기본 읽기 문제 수준인 "local"
를 재정의하려면 readConcern
옵션을 사용하십시오.
복제본 세트에 대한 다음 작업은 대부분의 노드에 기록된 것으로 확인된 데이터의 가장 최근 복제본을 읽을 수 있도록 "majority"
의 읽기 고려를 지정합니다.
중요
"majority"
의readConcern
수준을 사용하려면 비어 있지 않은query
조건을 지정해야 합니다.읽기 고려 수준에 관계없이 노드의 최신 데이터는 시스템에 있는 데이터의 최신 버전을 반영하지 않을 수 있습니다.
db.runCommand( { count: "restaurants", query: { rating: { $gte: 4 } }, readConcern: { level: "majority" } } )
단일 스레드가 자신의 쓰기를 읽을 수 있도록 하려면 복제본 세트의 프라이머리에 대해 "majority"
읽기 고려 및 "majority"
쓰기 고려를 사용합니다.