根据用例,设置aggregation 管道和$project 必要的嵌套文档可能更有意义:
df = pd.DataFrame(db.collection_name.aggregate([{
'$project': {
'_id': 0,
'name': '$name',
'age': '$age',
# Raise Sub-documents to top-level under new name
'address_number': '$address.number',
'address_street': '$address.street',
'address_city': '$address.city'
}
}]))
df:
name age address_number address_street address_city
0 Steve 27 4 Main Road Oxford
1 Adam 32 78 High St Cambridge
或者,如果需要手动完成的字段太多,我们也可以replaceRoot 和mergeObjects:
df = pd.DataFrame(db.collection_name.aggregate([
{'$replaceRoot': {'newRoot': {'$mergeObjects': ["$$ROOT", "$address"]}}},
{'$project': {'_id': 0, 'address': 0}}
]))
df:
name age number street city
0 Steve 27 4 Main Road Oxford
1 Adam 32 78 High St Cambridge
collection_name 设置:
# Drop Collection if exists
db.collection_name.drop()
# Insert Sample Documents
db.collection_name.insert_many([{
'name': 'Steve', 'age': 27,
'address': {"number": 4, "street": "Main Road", "city": "Oxford"}
}, {
'name': 'Adam', 'age': 32,
'address': {"number": 78, "street": "High St", "city": "Cambridge"}
}])