58 votes

Dans le pymongo de MongoDB, comment faire un count() ?

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

C'est mon code actuel.

Comment puis-je obtenir le nombre() ?

9voto

None-da Points 1203

Je ne sais pas pourquoi vous voulez le comptage si vous passez déjà la limite 'num'. Quoi qu'il en soit, si vous voulez affirmer, voici ce que vous devriez faire.

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

results_count = results.count(True)

Cela correspondra à results_count avec num

4voto

Max Points 23

Impossible de commenter malencontreusement la réponse de @Sohaib Farooqi... Remarque rapide : bien que cursor.count() ait été déprécié, il est significativement plus rapide, que collection.count_documents() dans tous mes tests, lors du comptage de tous les documents d'une collection (c'est-à-dire filter={}). Exécuter db.currentOp() dans le shell se réjouit que collection.count_documents() utilise un pipeline d'agrégation, alors que cursor.count() ne le fait pas. C'est peut-être une cause.

0voto

Evhz Points 3279

La chose dans mon cas repose sur le nombre d'éléments appariés pour une requête donnée, et sûrement de ne pas répéter cette requête deux fois :

un pour obtenir le compte, et
deux pour obtenir le résultat.

no way

Je sais que le jeu de résultats de la requête n'est pas assez grand et rentre dans la mémoire, par conséquent, je peux le convertir en une liste, et obtenir la longueur de la liste.

Ce code illustre le cas d'utilisation :

# 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X