Data Pipeline mit Pymongo

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Oxymoron
User
Beiträge: 2
Registriert: Samstag 2. September 2017, 17:31

Samstag 2. September 2017, 18:10

Hi,
sorry, ich hasse es selbst, sofort nach Forenanmeldung einen Thread mit einer Anfängerfrage zu erstellen. Komme aber leider ohne Hilfe nicht weiter, obwohl ich mich schon länger durch Google und StackOverflow-Posts wühle (und auch die SuFu hier gecheckt hab.) Wahrscheinlich ist meine Frage zu allgemein oder banal.
Ich bin recht unerfahren im Programmieren und arbeite mit Python 3.6, Pymongo 3.3.0 und MongoDB version 2.6.12.

Ich benutze Pymongo um auf eine MongoDB Database zuzugreifen. Darin habe ich eine Collection mit ca 800.000 Dokumenten mit folgender Struktur:

Code: Alles auswählen

{'_id': ObjectId('some_id'), 
 'accession': 'an_integer',
 'cik':    'another_integer',
 'filing_date': datetime.datetime(some_date),
 'item': 'some_string'}
Mein Ziel ist es, auf den String in 'item' eines jeden Dokuments der Collection verschiedene Umformungen anzuwenden (bspw. Sonderzeichen löschen, Stopwords aus einer Liste entfernen etc.) und die Dokumente mit dem umgeformten String in 'item' als neue Collection abzuspeichern.
Wenn ich das richtig verstanden habe, baut man sich dafür eine Pipeline. Ich scheitere allerdings daran, das umzusetzen, da mir der grundsätzliche Ansatz dafür fehlt. Ich habe mir das Aggregation-Framework von MongoDB angeschaut, wenn ich es richtig verstehe, kann ich darin allerdings nur die vordefinierten Aktionen ausführen, da es auf MongoDB-Ebene arbeitet. Ich weiß, wie ich einen Cursor mit db.collection.find() definiere, scheitere aber am Grundkonzept, eine Schleife zu bauen, die über den Cursor durch die Collection durchiteriert und die Ergebnisse als neue Collection abspeichert.
Wie ich die gewünschten Umformungen auf einen einzelnen String anwende, weiß ich.
Ich suche keine vorgefertigte Lösung, eher eine Hilfestellung, auf welche Funktionen oder Ansätze ich mich konzentrieren soll.
Bin gerade maximal ahnungslos und überfordert und freue mich über jegliche Hilfestellung. Danke im Voraus.
Benutzeravatar
noisefloor
User
Beiträge: 2477
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Samstag 2. September 2017, 19:33

Hallo,

ich benutzte zwar MongoDB und Pymongo nicht, aber nach meinem Verständnis der Doku iterierst du mit:

Code: Alles auswählen

for doc in db.collection.find():
    #do something here
über alle Dokumente in der Collection. Über `doc` bekommst du dann die `_id` für das Dokument und hast dann alles, was du für `db.collection.update_one()` brauchst. Zumindest in der Theorie :-)

Gruß, noisefloor
Oxymoron
User
Beiträge: 2
Registriert: Samstag 2. September 2017, 17:31

Montag 4. September 2017, 17:55

Vielen Dank! Habe es mit dem Hinweis jetzt hinbekommen. Manchmal hat man einfach ein Brett vor dem Kopf.
Antworten