문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

카운트

이 페이지의 내용

  • 정의
  • 구문
  • 안정적인 API 지원
  • 행동
  • 예제
count

컬렉션 또는 보기 화면에 있는 문서 수를 계산합니다. 이 개수와 명령 상태가 포함된 문서를 반환합니다.

mongosh 에서 이 명령은 count() 헬퍼 메서드를 통해서도 실행할 수 있습니다.

헬퍼 메서드는 mongosh 사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.

참고

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

명령은 다음과 같은 구문을 가집니다:

참고

버전 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 에는 다음과 같은 필드가 있습니다:

필드
유형
설명
count
문자열
계산할 컬렉션 또는 보기의 이름입니다.
query
문서
선택 사항입니다. 컬렉션 또는 보기에서 집계할 문서를 선택하는 쿼리입니다.
limit
integer
선택 사항. 반환할 일치 문서의 최대 개수입니다.
skip
integer
선택 사항입니다. 결과를 반환하기 전에 건너뛸 일치하는 문서의 수입니다.
hint
문자열 또는 문서
선택 사항입니다. 사용할 인덱스입니다. 인덱스 이름을 문자열로 지정하거나 인덱스 사양 문서로 지정합니다.
readConcern
문서

선택 사항입니다. 읽기 고려를 지정합니다. 이 옵션의 구문은 다음과 같습니다:

readConcern: { level: <value> }

가능한 읽기 고려 수준은 다음과 같습니다.

  • "local"이는 프라이머리 및 보조 노드에 대한 읽기 작업의 읽기 고려 수준입니다.

  • "available"입니다. 프라이머리 및 세컨더리에 대한 읽기 작업에 사용할 수 있습니다. "available"은 프라이머리 및 비 샤드형 세컨더리에 대해 "local"과 동일하게 동작합니다. 쿼리는 인스턴스의 가장 최근 데이터를 반환합니다.

  • "majority". WiredTiger 스토리지 엔진을 사용하는 복제본 세트에 사용할 수 있습니다.

  • "linearizable". primary의 읽기 작업에만 사용할 수 있습니다.

읽기 고려 수준에 대한 자세한 내용은 읽기 고려 수준을 참조하세요.

maxTimeMS
음수가 아닌 정수

선택 사항.

시간 제한을 밀리초 단위로 지정합니다. maxTimeMS에 값을 지정하지 않으면 작업이 시간 초과되지 않습니다. 0 값은 바인딩되지 않는 기본 동작을 명시적으로 지정합니다.

MongoDB는 db.killOp()와 동일한 메커니즘을 사용하여 할당된 시간 제한을 초과하는 작업을 종료합니다. MongoDB는 지정된 중단 지점 중 하나에서만 작업을 종료합니다.

collation
문서

선택 사항.

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

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

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

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

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

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

컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다.

한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다.

comment
어떤

선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.

댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다.

MongoDB 6.0부터 count 명령은 안정적인 API V1에 포함되어 있습니다. 안정적인 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 } }
] )

다음도 참조하세요.

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

Wired Tiger 스토리지 엔진을 사용하여 mongod를 비정상적으로 종료한 후에는 count에서 보고한 크기 통계가 정확하지 않을 수 있습니다.

편차의 정도는 마지막 체크포인트와 비정상 종료 사이에 수행된 삽입, 업데이트 또는 삭제 작업의 수에 따라 달라집니다. 체크포인트는 보통 60초마다 발생합니다. 그러나mongod 기본값이 아닌 --syncdelay 설정으로 실행되는 인스턴스는 체크포인트가 다소 빈번하게 발생할 수 있습니다.

mongod의 각 컬렉션에서 validate를 실행하여 비정상 종료 후 통계를 복원합니다.

비정상 종료 후

참고

이 정확도 손실은 쿼리 문서를 포함하지 않는 count 작업에만 적용됩니다.

MongoDB 4.2부터 count를 발급한 클라이언트가 작업이 완료되기 전에 연결을 끊는 경우, MongoDB는 count를 사용하여 를killOp을 종료로 표시합니다.

다음 섹션에서는 count 명령의 예시를 제공합니다.

다음 연산은 orders 컬렉션에 있는 모든 문서의 개수를 계산합니다.

db.runCommand( { count: 'orders' } )

결과에서 개수를 나타내는 n26이고 명령 상태 ok1입니다.

{ "n" : 26, "ok" : 1 }

다음 작업은 ord_dt 필드의 값이 Date('01/01/2012') 보다 큰 orders 컬렉션의 문서 수를 반환합니다.

db.runCommand( { count:'orders',
query: { ord_dt: { $gt: new Date('01/01/2012') } }
} )

결과에서 개수를 나타내는 n13 이고 명령 상태 ok1 입니다.

{ "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 } )

결과에서 개수를 나타내는 n3 이고 명령 상태 ok1 입니다.

{ "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 }
}
)

결과에서 개수를 나타내는 n1 이고 명령 상태 ok1 입니다.

{ "n" : 1, "ok" : 1 }

기본 읽기 문제 수준인 "local" 를 재정의하려면 readConcern 옵션을 사용하십시오.

복제본 세트에 대한 다음 작업은 대부분의 노드에 기록된 것으로 확인된 데이터의 가장 최근 복제본을 읽을 수 있도록 "majority"읽기 고려를 지정합니다.

중요

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

  • 읽기 고려 수준에 관계없이 노드의 최신 데이터는 시스템에 있는 데이터의 최신 버전을 반영하지 않을 수 있습니다.

db.runCommand(
{
count: "restaurants",
query: { rating: { $gte: 4 } },
readConcern: { level: "majority" }
}
)

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

← 집계
별개 →