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()
의 효과를 무시합니다. 이러한 메서드의 효과를 고려하려면applySkipLimit
를true
로 설정합니다.또한 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 } } ] )
인덱스 사용하기
다음 인덱스가 있는 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()