문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

db.collection.count()

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 행동
  • 예제
db.collection.count(query, options)

중요

Mongo쉬 방법

이 페이지에서는 mongosh 메서드를 설명합니다. 이는 데이터베이스 명령이나 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다 .

데이터베이스 명령에 대해서는 count 명령을 참조하십시오.

MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.

레거시 mongo 셸 문서는 해당 MongoDB 서버 릴리스 문서를 참조하세요.

Mongo 셸 V4.4

참고

4.0 기능과 호환되는 MongoDB 드라이버는 countDocuments()estimatedDocumentCount()에 대한 새로운 API를 위해 각각의 커서 및 컬렉션 count() API를 더 이상 사용하지 않습니다. 특정 드라이버의 구체적인 API 이름은 드라이버 설명서를 참조하세요.

컬렉션 또는 뷰에 대한 find() 쿼리와 일치하는 문서 수를 반환합니다. db.collection.count() 메서드는 find() 작업을 수행하지 않고 대신 쿼리와 일치하는 결과 수를 계산하여 반환합니다.

다음 환경에서 호스팅되는 배포에 db.collection.count() 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

이 메서드는 다음 매개변수를 사용합니다.

매개변수
유형
설명
query
문서
쿼리 선택 기준입니다.
options
문서
선택 사항. 개수 수정을 위한 추가 옵션입니다.

options 문서에 다음과 같은 필드가 있습니다:

필드
유형
설명
limit
integer
선택 사항입니다. 계산할 최대 문서 수입니다.
skip
integer
선택 사항. 계산하기 전에 건너뛸 문서 수입니다.
hint
문자열 또는 문서
선택 사항입니다. 쿼리에 대한 인덱스 이름 힌트 또는 사양입니다.
maxTimeMS
integer
선택 사항입니다. 쿼리 실행을 허용하는 최대 시간입니다.
readConcern
문자열

선택 사항입니다. 읽기 고려를 지정합니다. 기본 수준은 "local"입니다.

단일 스레드가 자신의 쓰기를 읽을 수 있도록 하려면 복제본 세트의 프라이머리에 대해 "majority" 읽기 고려 및 "majority" 쓰기 고려를 사용합니다.

읽기 고려 수준 "majority"를 사용하려면 비어 있지 않은 query 조건을 지정해야 합니다.

collation
문서

선택 사항.

작업에 사용할 데이터 정렬을 지정합니다.

데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.

데이터 정렬 옵션의 구문은 다음과 같습니다:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

데이터 정렬을 지정할 때 locale 필드는 필수이고, 다른 데이터 정렬 필드는 모두 선택 사항입니다. 필드에 대한 설명은 데이터 정렬 문서를 참조하세요.

데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( db.createCollection() 참조), 작업은 컬렉션에 지정된 데이터 정렬을 사용합니다.

컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, 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 } }
] )

다음도 참조하세요.

$collStats 는 collection의 메타데이터를 기반으로 대략적인 개수를 반환합니다.

다음 인덱스가 있는 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는killOp를 사용하여 { db.collection.count() 를 종료로 표시합니다

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()
← db.collection.configureQueryAnalyzer()

이 페이지의 내용