Wie kann ich Attribute aus einem Array von Objekten in CSV exportieren?

8

Ich muss Werte von Objekten in einem Array in CSV exportieren. Nehmen wir an, mein Dokument ist:

%Vor%

Mein Ziel ist es, Output wie:

zu produzieren %Vor%

Folgendes wäre auch akzeptabel:

%Vor%

Ich versuche dies über mongoexport zu erreichen mit:

%Vor%

Leider bekomme ich:

%Vor%

Ich habe eine Dokumentation zum Verweis auf bestimmte Array-Elemente wie "types.0.type" gefunden, aber die Länge meines Arrays ist unbekannt. Irgendwelche Ideen?

    
kgarske 05.05.2012, 21:39
quelle

3 Antworten

1

Wenn Sie mit Perl zufrieden sind, dann verwenden Sie die ARJsonLib.pm-Bibliothek im folgenden Artikel >, bietet die Mehrheit der Funktionalität, die Sie benötigen, um Ihr eigenes kleines Spielzeug zu erstellen. Beachten Sie, dass die Version in dem Artikel ein Stummel von einem Spielzeug ist, das ich zusammen gehackt habe, was genau das tut, was Sie wollen, aber als kein mongoDB Artikel fehlt es an einer Funktion, die die Felder / Schlüssel in einem findet mongoDB collection, und speichert sie in einem Array, aber trivial zu rekonstruieren, schreiben Sie sich einfach etwas, das pull n Dokumente aus Ihrer Sammlung, schiebt sie in ein Array und ruft findKeysInJsonColl (). Wie auch immer, einige Funktionen nehmen einen MongoDB Cursor als Parameter und:

%Vor%

Wieder fehlt die CSV -Ausgabe, aber es ist trivial, convertToExcel () hinzuzufügen.

z.B.

%Vor%

Dabei gilt: $ oMongoData ist eine MongoDB-Cursorreferenz und @aOutFields ein Array, das die Felder / Schlüssel enthält, die im Blatt angezeigt werden sollen,

    
arober11 15.11.2012 12:58
quelle
1

Sie müssen ein benutzerdefiniertes Skript schreiben, das Sammlungen durchläuft und Dokumente im gewünschten Format exportiert. Der eingebaute mongoexport wurde nicht für Anwendungsfälle wie Ihres entwickelt.

    
Sergio Tulentsev 06.05.2012 03:39
quelle
1

Sie können erreichen, was Sie versuchen, indem Sie die Aggregationspipeline-Operationen von MongoDb verwenden, um eine temporäre Sammlung mit den Daten in der Form zu erstellen, die Sie exportieren möchten:

%Vor%

Dies erstellt eine tmp4csv-Sammlung, die ein Dokument für jedes Element des Arrays enthält

in Ihrem Beispiel (und einen _id-Wert hinzufügen, da dieser Wert in meiner vorgeschlagenen Lösung berücksichtigt werden muss)

%Vor%

Durch die Verwendung des $ abroll-Operators wird

%Vor%

Als nächstes wird der $ -Projektoperator verwendet, um die Daten leicht zu reformieren - types.type in type zu entpacken und einen neuen eindeutigen _id-Wert für jedes Dokument bereitzustellen.

Abschließend werden die von der Aggregationspipeline erzeugten Dokumente mit dem $ out-Operator in die Sammlung "tmp4csv" ausgegeben. Ohne die Erstellung eines eindeutigen _id-Werts im vorherigen Schritt würde dieser Schritt aufgrund von doppelten Schlüsseln fehlschlagen.

Sie können die Daten dann in eine Ausgabedatei exportieren:

%Vor%

Und um alles sauber zu halten, würde ich dann die tmp4csv-Sammlung löschen, die als Teil davon erstellt wurde:

%Vor%

Dies sollte Ihnen eine CSV-Datei mit Ihrem bevorzugten Ausgabeformat geben.

Referenzen: Aggregations-Pipeline doc: Ссылка Operator abwickeln, da dies der Schlüssel ist: Ссылка

    
nomDePlum 18.02.2015 00:18
quelle

Tags und Links