Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

cursor.count()

이 페이지의 내용

  • 정의
  • 행동
  • 예시
cursor.count()

중요

Mongo쉬 방법

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

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

참고

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

커서가 참조한 문서 수를 계산합니다. find() 쿼리에 count() 메서드를 추가하여 일치하는 문서 수를 반환합니다. 이 작업은 쿼리를 수행하지 않고 대신 쿼리에서 반환되는 결과를 계산합니다.

count() 메서드의 프로토타입 형식은 다음과 같습니다.

db.collection.find(<query>).count()

count() 메서드에는 다음과 같은 매개변수가 있습니다.

Parameter
유형
설명
applySkipLimit
부울
선택 사항. 카운트에서 cursor.skip()cursor.limit() 메서드의 효과를 고려할지 여부를 지정합니다. 기본값 count() 메서드는 cursor.skip()cursor.limit() 의 효과를 무시합니다. 이러한 메서드의 효과를 고려하려면 applySkipLimittrue 로 설정합니다.

또한 MongoDB는 db.collection.find(<query>).count() 구성의 대안으로 동등한 db.collection.count()를 제공합니다.

MongoDB는 hint()count() 사용을 지원합니다. 사용할 인덱스 지정에서 예시를 참조하세요.

다음도 참조하세요.

쿼리 조건자를 지정하지 않는 find() 작업에서 count()를 호출하면 count() 메서드가 부정확한 문서 수를 반환할 수 있습니다. 이러한 count() 메서드는 컬렉션의 메타데이터를 기반으로 결과를 반환하므로 대략적인 개수가 나올 수 있습니다. 특히

  • 샤딩된 클러스터에서는 결과 개수가 고아 문서를 제대로 필터링하지 못합니다.

  • 비정상 종료 또는 파일 복사본 기반의 초기 동기화 후에는 개수가 부정확할 수 있습니다.

컬렉션 메타데이터를 기반으로 한 카운트에 대해서는 카운트 옵션이 있는 collStats 파이프라인 단계를 참조하세요.

트랜잭션에서는 count와 shell 헬퍼 count()db.collection.count() 를 사용할 수 없습니다.

자세한 내용은 트랜잭션 및 카운트 작업을 참조하세요.

샤딩된 클러스터에서 find에 쿼리 조건자가 없는 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는 동일한 개수 작업의 후속 호출이 더 나은 성능을 갖도록 문서를 메모리로 페이징합니다.

다음은 count() 메서드의 예입니다.

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

db.orders.find().count()

다음 작업은 new Date('01/01/2012')보다 큰 ord_dt 필드가 있는 orders collection의 문서 수를 계산합니다.

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

다음 연산에서는 limit(5)이(가) 적용되었으며 new Date('01/01/2012')를 초과하는 ord_dt 필드를 사용하여 orders 컬렉션 내 문서의 수를 계산합니다.

db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).limit(5).count(true)

다음 작업에서는 인덱스 키 사양이 { status: 1 }"status_1" 인덱스를 사용하여 ord_dt 필드가 new Date('01/01/2012')보다 크고 status 필드가 "D"orders collection에 있는 문서 수를 반환합니다.

db.orders.find(
{ ord_dt: { $gt: new Date('01/01/2012') }, status: "D" }
).hint( "status_1" ).count()

돌아가기

커서.comment

이 페이지의 내용