2016-10-29 10 views
0

Ich habe mehrere Sammlung in Mongodb. Das Beispiel der Struktur von Daten in mongodb ist wie folgt:Erhalten Sie alle eindeutigen Schlüssel und Werte

{ 
    u'_id': ObjectId('581453c6aeddbf0f04fa017b'), 
    u'pdpData': {u'taxEntry': {u'taxPercentage': 5}, u'fashionType': u'Core'} 
}, 
{ 
    u'_id': ObjectId('581453c7aeddbf0f04fa017c'), 
    u'pdpData': {u'taxEntry': {u'taxPercentage': 5}, u'fashionType': u'Fashion'}, 
    u'catalogAddDate': 1467297611 
} 

ich die Vereinigung aller Schlüssel und Wert in einem CSV-Format möge. Beispiel für das Ergebnis ist wie folgt:

objectID,     pdpdata.taxEntry.taxPercentage, pdpdat.taxEntry.fashionType, pdpdata.catalogAddDate 
581453c6aeddbf0f04fa017b, 5,        core,       NA 
581453c7aeddbf0f04fa017c, 5,        Fashion,      1467297611 

ich mehrere Verfahren ausprobiert, aber leider bin ich nicht in der Lage die Spaltennamen im gewünschten Format

mapper = Code(""" function() {for (var key in this) { emit(key,null);}}""") 
reducer = Code("""function(key, stuff) { return null; }""") 

distinctThingFields = db.women.map_reduce(mapper, reducer, out ={'inline' : 1}, full_response = True) 
print distinctThingFields 

hier ich nur bekommen immer die Spaltenwerte als

objectID , pdpdata 

nicht die innere Schlüssel

+0

Sind Ihre Dokumente in verschiedenen Sammlungen? – styvane

Antwort

1

mehrere sammlung in mongodb. Das Beispiel der Struktur von Daten in mongodb ist als

folgt Unter der Annahme, dass Sie mehrere Dokumente anstatt mehrere Sammlungen bedeuten, könnten Sie MongoDB Aggregation Pipeline nutzen.

PyMongo verwenden, basierend auf Ihren Daten Beispiele, könnten Sie Gruppe von objectId, taxPercentage und fashionType wie folgt:

pipeline = [ 
    {'$group': 
     {'_id': 
     {'objectId':"$_id", 
      'taxPercentage':"$pdpData.taxEntry.taxPercentage", 
      'fashionType':"$pdpData.fashionType" 
     } 
     } 
    }] 
cursor = db.collection.aggregate(pipeline) 

Iterieren der Cursor sollten Sie zurück:

{u'_id': {u'taxPercentage': 5.0, u'objectId': ObjectId('...'), u'fashionType': u'Fashion'}} 
{u'_id': {u'taxPercentage': 5.0, u'objectId': ObjectId('...'), u'fashionType': u'Core'}} 

Sie können Verwenden Sie dann Python csv module, um in CSV zu exportieren.

Wenn Sie diese Dokumente über mehrere Sammlungen Spanning und:

a) Die Dokumente haben die gleiche Struktur Daten: Im Allgemeinen sollten Sie gleiche strukturierte Dokumente in der gleichen Sammlung. Siehe auch Data Modeling für weitere Informationen.

b) Die Dokumente haben eine unterschiedliche Datenstruktur: Sie können die Aggregation pro Sammlung ausführen und dann das Ergebnis in Ihrem Python-Skript (Client-Seite) aggregieren. Wenn dies eine häufig verwendete Abfrage/Berichterstattung ist, sollten Sie Ihre Datenstruktur überdenken.

Verwandte Themen