J'ai récemment commencé à tester MongoDB via shell et via PyMongo. J'ai remarqué que renvoyer un curseur et essayer d'itérer sur il semble goulot dans l'itération réelle. Existe-t-il un moyen de renvoyer plusieurs documents lors de l'itération?PyMongo - itération de curseur
Code Pseudo:
for line in file:
value = line[a:b]
cursor = collection.find({"field": value})
for entry in cursor:
(deal with single entry each time)
Ce que j'espère faire quelque chose comme ceci:
for line in file
value = line[a:b]
cursor = collection.find({"field": value})
for all_entries in cursor:
(deal with all entries at once rather than iterate each time)
J'ai essayé d'utiliser batch_size() selon this question et modification de la valeur toute la 1000000, mais cela ne semble pas avoir d'effet (ou je le fais mal).
Toute aide est grandement appréciée. S'il vous plaît soyez facile sur ce newbie Mongo!
--- EDIT ---
Merci Caleb. Je pense que vous avez indiqué ce que j'essayais vraiment de poser, à savoir: est-il possible de faire une sorte de commande collection.findAll()
ou peut-être cursor.fetchAll()
, comme c'est le cas avec le module cx_Oracle? Le problème n'est pas de stocker les données, mais de les récupérer dans la base de données Mongo aussi vite que possible.
Pour autant que je sache, la vitesse à laquelle les données me sont retournées est dictée par mon réseau puisque Mongo doit aller chercher chaque enregistrement, n'est-ce pas?
Vous ne pouvez renvoyer qu'un seul enregistrement par itération. L'utilisation de la méthode 'batch_size' indique au curseur le nombre d'enregistrements à extraire en une fois. Donc, si l'itération (et non la récupération) est le goulot de la bouteille, vous pouvez essayer une compréhension de la liste. Je veux dire qu'il y a une limite de mémoire interne de 4 Mo dans le curseur pour les enregistrements récupérés. – cpburnz
J'ai exactement le même problème. Je suis nouveau à mongo (et python d'ailleurs). Je pense que toutes les suggestions sont essentiellement équivalentes dans le sens où ces différentes fonctions python interagissent toujours avec mongo exactement de la même manière, provoquant exactement le même résultat à chaque fois. Ou, en d'autres termes, mongo ne peut pas faire la différence entre aucune de ces approches; en ce qui le concerne, il a fait la requête find() et a ensuite demandé le curseur "n" fois. – Landon
@ Valdog21, c'était il y a plus d'un an, comment as-tu fini par résoudre ça? – Landon