MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mongodb, pymongo, agregado dá uma saída estranha (algo sobre o cursor)


O resultado de uma consulta de agregação é um cursor, como para um find normal consulta. No caso de pymongo o CommandCursor é iterável, portanto, você pode fazer o seguinte:
cursor = db.points.aggregate(...)

# Option 1
print(list(cursor))

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

Observação: como não notado , em ambos os casos, ou seja, depois de criar uma lista a partir do cursor, ou iterar no loop for, você não poderá reiterar sobre o cursor. Nesse caso a primeira opção se torna melhor, se você quiser usá-la no futuro, pois pode usar a lista obtida o quanto quiser, pois ela já está na memória.
O motivo de não poder reiterar é que o cursor está realmente no servidor, e ele envia os dados pedaço por pedaço, e depois de enviar todos os dados (ou o servidor terminar), o cursor é destruído.