45
for post in db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num):

これは私の現在のコードです。

count()を取得するにはどうすればよいですか?

4

6 に答える 6

47

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()設定applySkipLimitTrueます。

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:
于 2010-12-11T06:48:45.153 に答える
31

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。このメソッドは、コレクションのメタデータに基づいて(名前が示すように)ドキュメントの推定数を返します。

于 2019-02-19T05:23:46.950 に答える
9

すでに制限「num」を超えているのに、なぜカウントが必要なのかわからない。とにかく、あなたが主張したいのであれば、これがあなたがすべきことです。

results = db.datasets.find({"test_set":"abc"}).sort("abc",pymongo.DESCENDING).skip((page-1)*num).limit(num)

results_count = results.count(True)

これはresults_countnumを一致させます

于 2012-09-27T12:16:50.310 に答える
2

@Sohaib Farooqiの回答に不幸にもコメントすることはできません...クイックノート:非推奨になりましたが、コレクション内のすべてのドキュメントをカウントすると、すべてのテストcursor.count()よりも大幅に高速になります(つまり、filter = {})。実行すると、は集約パイプラインを使用しますが、使用しないことがわかります。これが原因である可能性があります。collection.count_documents()db.currentOp()collection.count_documents()cursor.count()

于 2021-04-28T10:19:36.487 に答える
1

このスレッドはたまたま11歳です。ただし、2022年に「count()」関数は非推奨になりました。Pythonを使用してMongoDBのドキュメントをカウントする方法を思いついたのは次のとおりです。これがコードスニペットの写真です。空のリストを作成する必要はありません私はただ風変わりになりたかっただけです。お役に立てれば :)。ここにコードスニペット。

于 2022-02-12T16:31:37.050 に答える
0

私の場合は、特定のクエリで一致した要素の数に依存しており、このクエリを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
于 2020-06-11T14:38:54.273 に答える