정의
cursor.count()중요
Mongo쉬 방법
이는
mongosh메서드입니다. 이는Node.js또는 기타 프로그래밍 언어별 드라이버 메서드에 대한 설명서가 아닙니다 .대부분의 경우
mongosh메서드는 레거시mongoshell 메서드와 동일한 방식으로 작동합니다. 그러나 일부 레거시 메서드는mongosh에서 사용할 수 없습니다.레거시
mongo셸 문서는 해당 MongoDB 서버 릴리스 문서를 참조하세요.MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 문서를 참조하세요.
참고
4.0 기능과 호환되는 MongoDB 드라이버는
countDocuments()및estimatedDocumentCount()에 해당하는 새로운 API를 위해 각각의 커서 및 컬렉션count()API를 더 이상 사용하지 않습니다. 특정 드라이버의 구체적인 API 이름은 드라이버 API 설명서를 참조하세요.커서 가 참조하는 문서 수를 계산합니다.
count()메서드를find()쿼리 에 추가하여 일치하는 문서 수를 반환합니다. 이 작업은 쿼리 를 수행하지 않고 대신 쿼리 에서 반환되는 결과를 계산합니다.중요
작업이 쿼리 조건자 없이 실행되는 경우 를 사용하지 않는데, 이는 쿼리 조건자가 없으면 이러한 가 컬렉션의
count()메타데이터를 기반으로 결과를 반환하여 대략적인 개수가find()count()나올 수 있기 때문입니다. 특히,샤딩된 클러스터에서는 결과 개수가 고아 문서를 제대로 필터링하지 못합니다.
비정상 종료 후에는 개수가 부정확할 수 있습니다.
컬렉션 메타데이터를 기반으로 한 카운트에 대해서는 카운트 옵션이 있는 collStats 파이프라인 단계를 참조하세요.
count()메서드의 프로토타입 형식은 다음과 같습니다.db.collection.find(<query>).count() count()메서드에는 다음과 같은 매개변수가 있습니다.Parameter유형설명applySkipLimit부울
선택 사항. 카운트에서 및
cursor.skip()cursor.limit()메서드의 효과를 고려할지 여부를 지정합니다.count()기본값 으로cursor.skip()cursor.limit()메서드는 및 의 효과를 무시합니다. 이러한 메서드의 효과를 고려하려면applySkipLimit를true로 설정합니다.또한 MongoDB는
db.collection.find(<query>).count()구성의 대안으로 동등한db.collection.count()를 제공합니다.MongoDB는
hint()및count()사용을 지원합니다. 사용할 인덱스 지정에서 예시를 참조하세요.
호환성
이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
참고
이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원에 관해 자세히 알아보려면 지원되지 않는 명령을 참조하십시오.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
행동
카운트 및 트랜잭션
트랜잭션에서는 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()