MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mongodb, pymongo, Aggregat gibt seltsame Ausgabe (etwas über den Cursor)

Das Ergebnis einer Aggregationsabfrage ist ein Cursor, wie bei einem normalen find Anfrage. Im Fall von pymongo der CommandCursor ist iterierbar, daher können Sie Folgendes tun:

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

# Option 1
print(list(cursor))

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

Hinweis: wie arun bemerkt hat , in beiden Fällen, d. h. nachdem Sie eine Liste aus dem Cursor erstellt oder in der for-Schleife iteriert haben, können Sie nicht erneut über den Cursor iterieren. In diesem Fall ist die erste Option besser, wenn Sie sie in Zukunft verwenden möchten, da Sie die erhaltene Liste so oft verwenden können, wie Sie möchten, da sie sich bereits im Speicher befindet.
Der Grund, warum dies nicht möglich ist Wiederholen ist, dass sich der Cursor tatsächlich auf dem Server befindet und die Daten Chunk-by-Chunk sendet, und nachdem er Ihnen alle Daten gesendet hat (oder der Server beendet wird), wird der Cursor zerstört.