我在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 :(得分:1)
mongodb中的几个集合。 mongodb中存在的数据结构示例如下
假设您指的是多个文档而不是多个集合,则可以使用MongoDB Aggregation Pipeline。
使用PyMongo,根据您的数据示例,您可以按objectId
,taxPercentage
和fashionType
进行分组,如下所示:
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。
如果这些文档跨越多个集合,并且:
a)文档具有相同的数据结构:通常,您应该在同一个集合中具有相同的结构化文档。有关详细信息,另请参阅Data Modeling。
b)文档具有不同的数据结构:您可以对每个集合运行聚合,然后在Python脚本(客户端)中聚合结果。如果这是一个经常使用的查询/报告,您应该重新考虑您的数据结构。