2017-07-07 4 views
0

Ich erstellte das Python-Skript zum Exportieren von CSV aus Mongodb. es hat nicht sehr gut funktioniert, weil es nicht alle Daten in den Feldern von mongodb exportiert hat. Ich benutze get-Methode, weil einige Datensätze in Sammlungen fehlen.Python Get-Methode exportiert nicht alle Daten in CSV-Datei

mongodb Beispiel:

"experience": [ 
     { 
      "order": null, 
      "date": { 
       "to": ISODate("2017-07-04T21:24:31.872Z"), 
       "from": ISODate("2003-08-16T21:24:31.872Z") 
      }, 
      "description": "Trained horses for various competitions. ", 
      "company": "D2 Ranch", 
      "position": "Horse Trainer" 
     }, 
     { 
      "order": null, 
      "date": { 
       "to": ISODate("2017-07-04T21:24:31.872Z"), 
       "from": ISODate("2003-08-16T21:24:31.872Z") 
      }, 
      "description": "Trained horses for various competitions. 2", 
      "company": "D2 Ranch 2", 
      "position": "Horse Trainer 2" 
     } 
    ] 

der Python-Skript:

import sys 
sys.setdefaultencoding('utf-8') 
import codecs 
import csv 
cursor = db.user_profiles.find ({}, {'_id':1, 'experience.description':1, 'experience.position':1}) 
with codecs.open('skills.csv','w', encoding='utf-8') as outfile: 
    fields = ['_id', 'experience.description', 'experience.position']   
    write = csv.DictWriter(outfile, fieldnames=fields) 
    write.writeheader() 
    for x in cursor: 
    x_id = x['_id'] 
     for y in x.get('experience', {}):    
      z = { 
      '_id':x_id,       
      'experience.description':y.get('description',None), 
       'experience.position':y.get('position',None)}    
     write.writerow(z) 

das Problem ist es die zweite Platte (Position: "Pferdetrainer 2") überspringt in Erfahrung Feld. Schätzen Sie für jede Hilfe, Danke

Antwort

0

Es sieht aus wie Mongo Abfrage ist gut, zumindest mit Version 3.4.4. Es gibt Liste der dicts wie:

{ 
    "_id" : ObjectId("59995fb7513601164f1325f8"), 
    "experience" : [ 
     { 
      "description" : "Trained horses for various competitions. ", 
      "position" : "Horse Trainer" 
     }, 
     { 
      "description" : "Trained horses for various competitions. 2", 
      "position" : "Horse Trainer 2" 
     } 
    ] 
} 

Es scheint, dass Problem in Ihrem das Python-Skript liegt (oder deren Formatierung, was in Python zählt). Gerade jetzt auf jeder Erfahrungsliste speichert dieser Code nur ein Element. Zeilenschreibcode wird nur nach for-Schleife ausgeführt. Es sollte wie folgt innerhalb sein:

for y in x.get('experience', {}):    
    write.writerow({ 
     '_id':x_id,       
     'experience.description':y.get('description',None), 
     'experience.position':y.get('position',None) 
    }) 
Verwandte Themen