首页 > 解决方案 > mongodb python 导入 csv

问题描述

我正在尝试将 csv 导入 Mongodb,然后从 Mongodb 执行命令以获取数据。

这是我的代码。

import pandas as pd
from pymongo import MongoClient

client = MongoClient()
db = client.test # client.database_name
collection = db.test #db.collection_name


def csv_to_json(filename, header=None):
    data = pd.read_csv(filename, header=header)
    return data.to_dict('records')

collection.insert_many(csv_to_json('test.csv'))

但是,我有这个错误。究竟出了什么问题?

    operation, command, docs, check_keys, ack, opts, ctx)

InvalidDocument: documents must have only string keys, key was 0

标签: pythonmongodb

解决方案


默认情况下read_csv(),将从零开始索引数据框的行和列。然后该to_dict()方法将创建一个具有数字键的字典列表。MongoDB 中不允许使用数字键;因此你看到的问题。

因此,假设您的 csv 文件如下所示:

Field1,Field2
a,x
b,y
c,z

那么你需要做的唯一改变是:

collection.insert_many(csv_to_json('test.csv', header=0))

这将告诉 pandas 基于标题行创建一个索引,然后该索引将成为文档中每个字段的键。

pprint.pprint(list(collection.find({}, {'_id': 0})))

给出:

[{'Field1': 'a', 'Field2': 'x'},
 {'Field1': 'b', 'Field2': 'y'},
 {'Field1': 'c', 'Field2': 'z'}]

推荐阅读