2016-10-29 89 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

使用PyMongo,基於數據的例子,你可以按objectIdtaxPercentagefashionType如下:

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

你可以然後使用Python csv module導出爲CSV。

如果你有這些文件跨多個集合跨越和:

一)的文件具有相同的數據結構:一般來說,你應該有相同的集合中相同的結構化文檔。有關更多信息,另請參閱Data Modeling。 b)文檔具有不同的數據結構:您可以運行每個集合的聚合,然後將結果聚合到您的Python腳本(客戶端)中。如果這是一個經常使用的查詢/報告,您應該重新考慮您的數據結構。