source

MongoDB에서 count()와 find()의 차이.count()

nicesource 2023. 5. 4. 20:03
반응형

MongoDB에서 count()와 find()의 차이.count()

차이점이 뭐죠, 기본적으로 제 컬렉션에 있는 모든 문서를 찾고 싶었습니다. db.mycollection.count()db.mycollection.find().count()?

둘 다 같은 결과를 반환합니다.누군가가 선택할 이유가 있습니까?count()find().count()라는 사실과는 대조적으로find()에는 셸에서 더 많은 정보를 보려면 "그것"을 입력해야 하는 기본 제한이 적용됩니다(잘못된 경우 수정).

db.collection.count()그리고.cursor.count()명령어 주위의 래퍼일 뿐이므로 실행됩니다.db.collection.count()그리고.cursor.count()동일한 값을 사용하거나 사용하지 않으면 동일한 쿼리 인수가 반환되고, 동일한 결과가 반환됩니다.하지만, 그count결과가 샤드 클러스터에서 부정확할 수 있습니다.

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

메소드는 내부적으로 집계 쿼리를 사용하여 문서 수를 반환하고 메타데이터를 기반으로 문서 수를 반환합니다.

언급할 가치가 있습니다.estimatedDocumentCount설명서에 언급된 대로 출력이 부정확할 수 있습니다.

db.collection.count()매개 변수를 지정하지 않으면 집합의 모든 문서가 카운트됩니다. db.collection.find()매개변수 없이 집합의 모든 문서와 일치하고 추가합니다.count()숫자를 셀 수 있으므로 차이가 없습니다.

이는 db.collection.count() 설명서에서 명시적으로 확인할 수 있습니다.

주문 컬렉션의 모든 문서 수를 계산하려면 다음 작업을 사용합니다.

db.orders.count()

이 작업은 다음과 같습니다.

db.orders.find().count()

쉴락의 다른 대답에서 언급했듯이, 두 가지는 동등합니다 - 단,db.collection.count()샤드 클러스터의 경우 부정확할 수 있습니다.

최신 설명서에는 다음과 같은 내용이 나와 있습니다.

count()는 db.collection.find()와 동일합니다.구문을 세어 보다

그리고 나서.

샤드 클러스터

샤드 클러스터에서 db.collection.count()는 고아 문서가 있거나 청크 마이그레이션이 진행 중인 경우 개수가 정확하지 않을 수 있습니다.

설명서에서는 이 버그를 완화하는 방법을 설명합니다(애그리게이트 사용).

db.collection.count()는 db.collection.find()와 동일합니다.구문을 세어 보다

컬렉션의 모든 문서 카운트

db.orders.count()

이 작업은 다음과 같습니다.

db.orders.find().count()

쿼리와 일치하는 모든 문서 카운트

ord_dt 필드가 새 날짜('01/01/2012')보다 큰 주문 컬렉션의 문서 수를 계산합니다.

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.count()는 부정확할 수 있습니다.

  1. 샤드 클러스터에서 쿼리 술어가 없는 db.collection.count()는 고아 문서가 있거나 청크 마이그레이션이 진행 중인 경우 개수가 정확하지 않을 수 있습니다.
  2. Wired Tiger 저장 엔진을 사용하여 부정하게 mongod를 종료한 후 count()에 의해 보고된 카운트 통계가 부정확할 수 있습니다.

저는 당신이 다음과 같은 종류의 페이지를 사용하고 있다고 믿습니다.

find(query).limit().skip().count() 

다음과 같은 결과를 얻지 못할 것입니다.

count(query)

그래서 이런 경우에, 총계를 얻고 싶다면, 두 가지를 모두 사용해야 할 것 같습니다.

언급URL : https://stackoverflow.com/questions/32666330/difference-between-count-and-find-count-in-mongodb

반응형