Wie zu Lesen, durch Sammlung in Blöcken von 1000?
Ich Lesen müssen ganze Sammlung von MongoDB ( name der Kollektion ist "test" ) in Python-code. Ich habe versucht, wie
self.__connection__ = Connection('localhost',27017)
dbh = self.__connection__['test_db']
collection = dbh['test']
Wie zu Lesen, durch Sammlung in Blöcken von 1000 ( zur Vermeidung von Speicher-überlauf, da die Sammlung sehr groß sein kann ) ?
- Sorry drop eine url an Sie, aber ich glaube, es ist elegant gelöst: code.activestate.com/recipes/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Stimme mit Remon, aber Sie erwähnen Chargen von 1000, die seine Antwort nicht wirklich decken. Sie können batch-Größe auf den cursor:
Können Sie auch skip records, z.B.:
Ist es das, was du suchst? Dies ist effektiv eine Paginierung Muster. Allerdings, wenn Sie nur versuchen zu vermeiden, den Speicher dann eine Erschöpfung ein, die Sie nicht wirklich benötigen, um batch-Größe oder überspringen.
Verwenden von Cursorn. Cursor ein "batchSize" variable, die steuert, wie viele Dokumente tatsächlich an den client per batch nach einer Abfrage. Sie müssen nicht berühren Sie diese Einstellung, wenn da der Standard ist in Ordnung und die Komplexität, wenn die Anrufung "getmore" - Befehle in Euch verborgen ist in den meisten Fahrern. Ich bin nicht vertraut mit pymongo, aber es funktioniert wie folgt :
inspiriert von @Rafael Valero + Befestigung letzten chunk Fehler in seinem code und macht es mehr Allgemeine I erstellt generator-Funktion zum Durchlaufen mongo Kollektion mit Abfrage und Projektion:
so zum Beispiel, erstellen Sie zunächst einen iterator wie diese:
und iteriere es von chunks:
Hier ist eine generische Lösung für die Iteration über jede iterator oder generator vom Stapel:
Dies funktioniert, solange die
cursor
definiert eine Methode__next__
(d.h. wir könnennext(cursor)
). Also, wir können es verwenden, auf raw-cursor oder auch auf Datensätze umgewandelt.Beispiele
Einfache Nutzung:
Komplexere Verwendung (nützlich für bulk-updates zum Beispiel):
Neuimplementierung des
count()
Funktion:Dem erstellen der ersten Verbindung, die derzeit in Python 2 mit Pymongo:
Verbindung mit MongoClient
Also hier die richtige Antwort.
Ich will Lesen, indem Sie Teile (in diesem Fall der Größe 1000).
Zum Beispiel könnten wir entscheiden, wie viele Stücke der Größe (chunksize) wir wollen.
Dann können wir abrufen, wird jedes Stück.
Wo die Abfrage in diesem Fall ist
query = {}
.Hier Ich ähnliche Ideen zu schaffen, dataframes von MongoDB.
Hier Ich benutze etwas ähnliches zu schreiben, zu MongoDB in Stücke schneiden.
Ich hoffe, es hilft.