2016-10-29 5 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, основываясь на ваших примерах данных, можно группировать по 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.

Если у вас есть эти документы, охватывающие несколько семейств, и:

а) документы имеют ту же структуру данных: Как правило, вы должны иметь тот же структурированные документы в одной и ту же коллекции. См. Также Data Modeling для получения дополнительной информации.

b) Документы имеют различную структуру данных: вы можете запускать агрегацию для коллекций, а затем агрегировать результат в вашем скрипте Python (на стороне клиента). Если это часто используемый запрос/отчетность, вы должны пересмотреть свою структуру данных.

Смежные вопросы