Я запрашиваю коллекцию, используя pymongo :
import pymongo
client = pymongo.MongoClient('0.0.0.0', 27017)
db = client.documents
collection = db.collections
test_data = collection.find_one({'metadata.encodingStage.terms.data.line.data.account.shortDescription': {'$exists': True}},
{'metadata.encodingStage.terms.data.line.data.account.shortDescription': 1})
Я использую find_one
здесь для иллюстрации, но на практике это запрос find
для всей коллекции.
Это дает следующий вывод:
{'_id': ObjectId('5a2fb9371de46756df51f37b'),
'metadata': {'encodingStage': {'terms': {'data':
{'line': [{'data': {'account': {'shortDescription': ['123456']}}},
{'data': {'account': {'shortDescription': ['7890123']}}}]}}}}}
Тем не менее, я хотел бы, чтобы данные в табличном формате, в соответствии с SQL или Pandas:
_id shortDescription
-------------------------------------------------------
ObjectId('5a2fb9371de46756df51f37b') 123456
ObjectId('5a2fb9371de46756df51f37b') 7890123
Я понимаюкак это сделать в Python, циклически обрабатывая результаты, но для эффективности вычислений я хотел бы, чтобы в Mongo происходило больше табуляции.
Есть ли простой способ использовать pymongo для вывода результатов в виде {'_id': 'XXX', 'shortDescription': 'XXX')
пары, которые могут быть эффективно сведены в таблицу?
Развернуть агрегацию?
Я пытался сделать это как $unwind
агрегацию:
unwind = collection.aggregate([{'$unwind': '$metadata.encodingStage.terms.data.line.data.account.shortDescription'}])
... но это не возвращает данных.