MongoDB의 Pymongo에서 카운트()는 어떻게 하나요?
for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):
어떻게 해야 하나요?count()
?
pymongo 버전 3.7.0 이상의 count()는 더 이상 사용되지 않습니다.대신 사용합니다. 실행 중cursor.count
또는collection.count
다음과 같은 경고 메시지가 표시됩니다.
DeprecationWarning: count is deprecated. Use Collection.count_documents instead.
사용하기count_documents
코드는 다음과 같이 조정할 수 있습니다.
import pymongo
db = pymongo.MongoClient()
col = db[DATABASE][COLLECTION]
find = {"test_set":"abc"}
sort = [("abc",pymongo.DESCENDING)]
skip = 10
limit = 10
doc_count = col.count_documents(find, skip=skip)
results = col.find(find).sort(sort).skip(skip).limit(limit)
for doc in result:
//Process Document
참고: count_documents
방법은 비교적 느리게 수행됩니다.count
방법.최적화하기 위해 을 사용할 수 있습니다.이 메서드는 컬렉션 메타데이터를 기반으로 예상되는 문서 수(이름이 제안한 대로)를 반환합니다.
Pymongo 버전 3.7.0 이상을 사용하는 경우 대신 다음 답변을 참조하십시오.
네가 원한다면results_count
당신의 것을 무시하는 것limit()
:
results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)
results_count = results.count()
for post in results:
만약 당신이 원한다면,results_count
의 상한선을 정하다limit()
설정:
results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)
results_count = results.count(True)
for post in results:
이미 한계 'num'을(를) 초과하는 경우 카운트를 원하는 이유를 알 수 없습니다.어쨌든 당신이 주장하고 싶다면, 여기 당신이 해야 할 일이 있습니다.
results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)
results_count = results.count(True)
results_count와 num이 일치합니다.
@Sohaib Farooqi의 대답에 유감스럽게도 논평할 수 없습니다...간단한 참고: 하지만,cursor.count()
더 이상 사용되지 않습니다. 훨씬 더 빠릅니다.collection.count_documents()
모든 테스트에서 컬렉션의 모든 문서를 셀 때(즉, 필터={}).입니다.db.currentOp()
는 것을 밝힙니다.collection.count_documents()
집계 파이프라인을 사용하는 동안cursor.count()
Doesn't.원인일 수도 있습니다.
이 실은 11년 된 것입니다.그러나 2022년에는 'count()' 기능이 더 이상 사용되지 않습니다.다음은 제가 Python을 사용하여 MongoDB에서 문서를 세는 방법을 생각해 낸 것입니다.여기 코드 조각 사진이 있습니다.빈 목록을 작성할 필요가 없습니다. 저는 그저 특이하고 싶었을 뿐입니다.이것이 도움이 되기를 바랍니다 :).코드 조각입니다.
이 경우 주어진 쿼리에 대해 일치하는 요소의 수에 의존하며, 이 쿼리를 두 번 반복하지 않습니다.
하나는 카운트를 받고, 그리고.
결과 세트를 얻기 위해 2.
말도 안돼
쿼리 결과 집합이 그다지 크지 않고 메모리에 적합하다는 것을 알고 있으므로 목록으로 변환하여 목록 길이를 얻을 수 있습니다.
이 코드는 사용 사례를 보여줍니다.
# pymongo 3.9.0
while not is_over:
it = items.find({"some": "/value/"}).skip(offset).size(limit)
# List will load the cursor content into memory
it = list(it)
if len(it) < size:
is_over = True
offset += size
커서를 사용하고 카운트도 원하는 경우 이 방법을 사용할 수 있습니다.
# Have 27 items in collection
db = MongoClient(_URI)[DB_NAME][COLLECTION_NAME]
cursor = db.find()
count = db.find().explain().get("executionStats", {}).get("nReturned")
# Output: 27
cursor = db.find().limit(5)
count = db.find().explain().get("executionStats", {}).get("nReturned")
# Output: 5
# Can also use cursor
for item in cursor:
...
자세한 내용은 https://pymongo.readthedocs.io/en/stable/api/pymongo/cursor.html#pymongo.cursor.Cursor.explain 에서 확인하실 수 있습니다.
수집에 모든 레코드 수(필터 없음)를 지정하려면 다음을 사용합니다.
from pymongo import MongoClient
cl = pymongo.MongoClient(host="localhost", port=27017)
db = cl["database_name"]
print(db.get_collection("collection_name").estimated_document_count())
언급URL : https://stackoverflow.com/questions/4415514/in-mongodbs-pymongo-how-do-i-do-a-count
'bestsource' 카테고리의 다른 글
목표 세션을 유지하기 위한 모범 사례 (0) | 2023.07.03 |
---|---|
SQL Server 2012 Management Studio에서 "대상 데이터베이스에 대한 기존 연결 닫기"가 회색으로 표시되는 이유는 무엇입니까? (0) | 2023.07.03 |
WordPress - 태그 및 카테고리별로 필터링된 게시물 목록 생성 (0) | 2023.07.03 |
Mongodb에서 필드 값 곱셈 (0) | 2023.07.03 |
Java의 여러 데이터 소스(오라클, Excel, SQL 서버)에 액세스하기 위한 단일 SQL 쿼리 (0) | 2023.07.03 |