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() ?
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() ?
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
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.
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 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.