Как экспортировать коллекцию MongoDB с помощью библиотеки pymongo (python)?

#python #mongodb #pymongo

#python #mongodb #pymongo

Вопрос:

У меня не так много опыта, я просмотрел много статей, результат ни к чему не привел. У меня есть небольшая коллекция (85 документов), мне нужно экспортировать ее с помощью python. Да, это был он. Если с вставкой документов, установкой индексов проблем нет, то здесь они появились.

Как я понимаю, необходимо использовать метод find . Вот пример документа коллекции.

 {"_id":{"$oid":"6012b7e0fe7371258899441e"}, "date":"2021-01-23","confirmed":12638,"deaths":113,"recovered":10710,
"region_name":"Республика Адыгея",
"region_code":"RU-AD","isolation_start":"16.07.2020 21:58:11",
"level":3,"self_isolation":null}
 

Как необходимо выполнить преобразования, чтобы получить csv? Если это не затруднит, могу ли я привести пример кода?

Комментарии:

1. почему бы вам не попробовать pandas ? Вы извлекаете все документы, затем читаете их в pandas, а затем используете pandas.to_csv()

2. @Epsi95, я пытался, но в итоге по какой-то причине навык не сработал, я добавил метод, который я сделал в ответе. Я был бы рад, если бы вы объяснили мне, как использовать pandas в этом случае.

3. @Epsi95, я понял, как это сделать, видимо, долго сидел за монитором и тупил. спасибо)

Ответ №1:

Видимо, я сидел за монитором. Я сделал два способа, может быть, кому-то это понадобится.

 client = MongoClient('mongodb://localhost:27017/')
db = client.test_import
collection = db.myimport2

csv_columns = ['_id','date','confirmed', 'deaths', 'recovered', 'region_name', 'region_code', 'isolation_start', 'level', 'self_isolation']

with open('mycsvfile.csv', 'w', encoding='utf-8') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
    writer.writeheader()
    for post in collection.find():
        writer.writerow(post)
 

и панды

 client = MongoClient('mongodb://localhost:27017/')
db = client.test_import
collection = db.myimport2

df = pd.DataFrame(list(collection.find()))

df.to_csv('mycsvfile2.csv')