2016-10-29 10 views
0

私はいくつかのコレクションをmongodbに持っています。次のようにMongoDBの中に存在するデータの構造の一例は以下のとおりです。すべてのユニークなキーと値を取得

{ 
    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 
} 

私はCSV形式ですべてのキーと値の和集合を求めています。次のように結果の 例は次のとおりです。

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

私はいくつかの方法を試してみましたが、残念ながら、私は必要な形式

ここ
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 

にカラム名を取得することができません、私は唯一の列の値を取得しています

objectID , pdpdata 

ないインナーキー

+0

文書はさまざまなコレクションにありますか? – styvane

答えて

1
として

複数のコレクションがmongodbにあります。 mongodbに存在するデータ構造の例は、次のとおりです。

複数のコレクションではなく複数のドキュメントを意味すると仮定すると、MongoDB Aggregation Pipelineを利用できます。

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

反復処理カーソルがあなたを返す必要があります:

{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'}} 

することができますあなたのデータの例をもとに、あなたは以下のようにobjectIdtaxPercentagefashionTypeでグループができPyMongoを使用して

、 Python csv moduleを使用してCSVにエクスポートします。

あなたは、これらの複数のコレクション全体に及ぶ文書、およびを使用している場合:

a)の文書が同じデータ構造を持っている:一般的にあなたが同じコレクション内の同じ構造化文書を持っている必要があります。詳細はData Modelingも参照してください。

b)ドキュメントのデータ構造が異なります。コレクションごとに集計を実行し、その結果をPythonスクリプト(クライアント側)に集約できます。これが頻繁に使用されるクエリ/レポートの場合は、データ構造を再検討する必要があります。

関連する問題