如何使用python在csv中为子对象提供自己的列来导出MongoDB数据?

2024-09-28 22:39:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python非常陌生,正在尝试将数据从MongoDB集合移动到CSV文档中(如果可能,需要使用Python而不是mongoexport)。你知道吗

我使用Pymongo和CSV包将数据库中的数据导入CSV。你知道吗

这是我从MongoDB查询的数据结构:

主标识符-计算机名(父级):R2D2

详细信息-计算机详细信息(父级):操作系统(子级),所有者(子级)

我需要操作系统所有者在CSV表中有自己的列,但它们总是落在一个名为计算机名的列下。你知道吗

有没有其他的方法,这样子对象就可以有自己的列,而不是在父对象下分组?你知道吗


Tags: csv数据对象文档数据库数据结构mongodb计算机
1条回答
网友
1楼 · 发布于 2024-09-28 22:39:59

这种事我做过很多次。您将有一个循环用pymongo迭代mongo查询。在循环的底端,您将使用csv模块来写入csv文件的每一行。你的问题与循环中间发生的事情有关。你知道吗

MongoDB语法最接近Java语言,它也适合Mongo中的“关联数组”对象,即JSON。Pymongo使这些东西更接近Python类型。你知道吗

因此,父对象将直接来自pymongo iterable,如果它们有子对象,则将通过Python字典:

import csv
from pymongo import MongoClient

client = MongoClient(ipaddress, port)
db = client.MyDatabase
collection = db.mycollection   

f = open('output_file.csv', 'wb')
csvwriter = csv.writer(f) 

for doc in collection.find():
    computer_name = doc.get('Computer Name')
    operating_system = computer_name.get('Operating System')
    owner = computer_name.get('owner')
    csvwriter.writerow([operating_system, owner])
f.close()

当然,可能还有很多其他没有子级的专栏也直接来自doc。你知道吗

相关问题 更多 >