2016-11-30 5 views
1

Ich benutze PyMongo und versuche, über 10 Millionen Dokumente in meiner MongoDB Sammlung zu iterieren und extrahiere einfach ein paar Schlüssel: "name" und "Adresse", dann gib sie aus .csv-Datei.Pymongo: iteriere über alle Dokumente in der Sammlung

Ich kann nicht die richtige Syntax herauszufinden es mit find() zu tun foreach()

Ich war Abhilfen wie

versucht
cursor = db.myCollection.find({"name": {$regex: REGEX}}) 

wo REGEX würde alles passen -. Und es führte zu „getötet ". Ich habe auch versucht

cursor = db.myCollection.find({"name": {"$exist": True}}) 

aber das hat nicht funktioniert.

Irgendwelche Vorschläge?

+0

was ist Ihre tatsächliche Abfrage oder Ihr gewünschtes Ergebnis? Bitte erläutern Sie ein bisschen besser. – sergiuz

+0

Ich bin mir nicht sicher, ob Sie das schon versucht haben oder nicht, versuchen Sie es mit einem Job zur Kartenreduzierung, um Ihre Arbeit zu erledigen. Angesichts des riesigen Datensatzes scheint es eine bessere Option zu sein. Es ist nur ein Vorschlag. – user1211

Antwort

1

Ich kann die richtige Syntax nicht herausfinden, es mit find() zu tun. ForEach()

cursor.forEach() ist für Python nicht verfügbar, es ist eine JavaScript-Funktion. Sie müssten einen Cursor bekommen und darüber iterieren. Siehe PyMongo Tutorial: querying for more than one document, wo Sie tun können:

for document in myCollection.find(): 
    print(document) # iterate the cursor 

wo REGEX würde alles passen - und es führte zu "getötet".

Leider fehlen hier Informationen, um herauszufinden, warum und was 'Killed' ist. Obwohl, wenn Sie möchten, dass alles passen, können Sie einfach Zustand:

cursor = db.myCollection.find({"name": {$regex: /.*/}}) 

Da Feld name String-Werte enthält. Wenn Sie $exists verwenden, um zu überprüfen, ob das Feld name vorhanden ist, wäre dies besser als die Verwendung von Regex.

Während die Verwendung von $exists Operator in Ihrem Beispiel oben ist falsch. Sie vermissen eine s in $exists. Wiederum wissen wir leider nicht viel darüber, was "nicht funktioniert" bedeutet, um weiter zu debuggen.

Wenn Sie dieses Skript für Python Übung schreiben, würde ich eine Bewertung empfehlen:

Sie auch in einem kostenlosen Online-Kurs bei MongoDB University einschreiben könnten für M101P: MongoDB for Python Developers.

Wenn Sie jedoch nur versuchen, Ihre Aufgabe des Exportierens von CSV aus einer Sammlung zu erfüllen. Als Alternative könnten Sie einfach MongoDB mongoexport verwenden.Welche hat die Unterstützung für:

mongoexport usage für weitere Informationen.

Verwandte Themen