2017-02-09 4 views
1

Mein Arzt exportieren:Wie die Felder eines eingebetteten Dokuments in mongodb

db.org.insert({ 
    "id" : 28, 
    "organisation" : "Mickey Mouse company", 
    "country" : "US", 
    "contactpersons" : [{ 
     "title" : "", 
     "typecontact" : "D", 
     "mobilenumber" : "757784854", 
     "firstname" : "Mickey", 
     "lastname" : "Mouse", 
     "emailaddress" : "[email protected]" 
    }, 
    { 
     "title" : "", 
     "typecontact" : "E", 
     "mobilenumber" : "757784854", 
     "firstname" : "Donald", 
     "lastname" : "Duck", 
     "emailaddress" : "[email protected]" 
    }], 
    "modifieddate" : "2013-11-21T16:04:49+0100" 
}); 

Meine Frage:

mongoexport --host localhost --db sample --collection org --type csv --fields country,contactpersons.0.firstname,contactpersons.0.emailaddress --out D:\info_docs\org.csv 

Durch diese Abfrage, ich bin in der Lage, nur die ersten Dokument Werte zu erhalten die Kontaktpersonen.Aber ich versuche auch die zweiten Dokumentwerte zu exportieren.

Wie kann ich dieses Problem beheben? Kann mir bitte jemand helfen in Bezug auf diese ...

Antwort

0

Sie erhalten genau das erste Dokument in contactpersons, weil Sie nur das erste Element des Arrays (contactpersons.0.firstname) exportieren. mongoexport kann nicht mehrere oder alle Elemente eines Arrays exportieren. Sie müssen also das Array abwickeln und in einer anderen Sammlung speichern. Sie können dies mit der aggregation framework tun.

Erstens können eine $unwind von Kontaktpersonen, dann $project die Felder mögen Sie (in Ihrem Beispiel country und contactpersons) verwenden, und schließlich mit $out die Ausgabe in einer neuen Kollektion zu speichern.

db.org.aggregate([ 
    {$unwind: '$contactpersons'}, 
    {$project: {_id: 0, org_id: '$id', contacts: '$contactpersons', country: 1}}, 
    {$out: 'aggregate_org'} 
]) 

Jetzt können Sie einen mongoexport von contacts tun (was das Ergebnis der $unwind von contactpersons ist) und country.

mongoexport --host localhost --db sample --collection aggregate_org --type=csv --fields country,contacts.firstname,contacts.emailaddress --out D:\info_docs\org.csv 
+0

Vielen Dank für Ihre Antwort. Aber es verwendet eine Dummy-Sammlung richtig. Stattdessen können wir den JavaScript-Code schreiben, um das eingebettete Dokument zu iterieren und die gleiche .js-Datei im Befehl mongoexport zu verwenden. – dev777

+0

Richtig, in diesem Fall verwenden Sie eine neue Dummy-Sammlung, um das Ergebnis der Abwicklung zu speichern. Ich bin nicht sicher, wie Sie es mit einem Javascript-Code tun könnten; Am Ende müßtest du das Array sowieso abwickeln. –

Verwandte Themen