MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mongodb, pymongo, agrégat donne une sortie étrange (quelque chose à propos du curseur)

Le résultat d'une requête d'agrégation est un curseur, comme pour un find normal requête. En cas de pymongo le CommandCursor est itérable, vous pouvez donc effectuer l'une des actions suivantes :

cursor = db.points.aggregate(...)

# Option 1
print(list(cursor))

# Option 2
for document in cursor:
    print(document)

Remarque : comme arun a remarqué , dans les deux cas, c'est-à-dire qu'après avoir créé une liste à partir du curseur ou avoir itéré dans la boucle for, vous ne pourrez pas réitérer sur le curseur. Dans ce cas, la première option devient meilleure, si vous souhaitez l'utiliser à l'avenir, car vous pouvez utiliser la liste obtenue autant que vous le souhaitez, car elle est déjà en mémoire.
La raison de ne pas pouvoir répéter est que le curseur est réellement sur le serveur, et qu'il envoie les données morceau par morceau, et après qu'il vous a envoyé toutes les données (ou que le serveur se termine), le curseur est détruit.