for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):
これは私の現在のコードです。
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()
に設定applySkipLimit
しTrue
ます。
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:
pymongoバージョン3.7.0以降では、count()は非推奨になりました。代わりに。を使用してCollection.count_documents
ください。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
ます。最適化するために、を使用できますcollection.estimated_document_count
。このメソッドは、コレクションのメタデータに基づいて(名前が示すように)ドキュメントの推定数を返します。
すでに制限「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()
よりも大幅に高速になります(つまり、filter = {})。実行すると、は集約パイプラインを使用しますが、使用しないことがわかります。これが原因である可能性があります。collection.count_documents()
db.currentOp()
collection.count_documents()
cursor.count()
このスレッドはたまたま11歳です。ただし、2022年に「count()」関数は非推奨になりました。Pythonを使用してMongoDBのドキュメントをカウントする方法を思いついたのは次のとおりです。これがコードスニペットの写真です。空のリストを作成する必要はありません私はただ風変わりになりたかっただけです。お役に立てれば :)。ここにコードスニペット。
私の場合は、特定のクエリで一致した要素の数に依存しており、このクエリを2回繰り返さないようにしてください。
1つはカウントを取得し、
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