MongoDB数据库将.csv格式数据借助命令终端、图形界面、Pycharm导入MongoDB数据库

本文基于MongoDB version v4.2.2 部分语句不适于不同版本,建议AI替换语句

前言

在大数据应用开发中,数据导入与导出是连接传统文件与数据库的关键环节。无论是在科研项目还是课程实验中,掌握如何将 Excel 或 CSV 文件高效导入 MongoDB,都是数据处理能力的重要体现。本文将系统介绍三种常见方法——命令终端导入、图形界面导入、PyCharm 编程导入,并结合实例与截图,详细说明各步骤的编码格式设置、命令语法及常见错误解决方案,帮助读者快速上手,实现从文件到 MongoDB 的完整数据迁移流程。

一、如何将xlsx 文件另存为 csv 格式(编码格式为utf-8)

使用Microsoft Excel 打开xlsx文件

开始>另存为>选择要保存到地方
在这里插入图片描述
此时用文本编辑器或者notepad++打开后,显示编码格式为UTF-8 BOM

对比项UTF-8UTF-8 with BOM(或简称 UTF-8 BOM
BOM 含义无字节顺序标记(Byte Order Mark)文件开头包含一个额外的 3 字节标记:EF BB BF
文件头直接从内容开始文件的最前面多出 0xEF 0xBB 0xBF 三个字节
用途通常用于 Unix/Linux、网页、服务器环境常见于 Windows(尤其是记事本 Notepad)
识别作用依靠文件内容或编辑器判断编码BOM 可显式告诉程序“我是 UTF-8 编码”
兼容性更通用,兼容性好某些编译器、解释器或系统识别失败(比如 Python、bash)

UTF-8 BOM文件头多了 3 个字节 EF BB BF,用来显式标记编码,但在部分系统中会导致问题。

笔者的解决方法是在notepad++中 编码>UTF-8 ctrl+s保存 ,就可以让他变为utf-8的编码形式

二、通过命令终端将xls格式数据导入MongoDB数据库。

首先,将xls文件转为(编码格式为utf-8)的.csv文件

打开命令行终端

mongoimport -d bishe -c xuanti --type csv --headerline --file E:\NoSQL\MongoDB\bishexuanti.csv

命令说明:
-d 指定数据库名;
-c 指定集合名;
–headerline 表示首行作为字段名;
–file 指定 CSV 文件路径。
在这里插入图片描述
如图所示 导入成功!


验证如下图:
在这里插入图片描述

1 mongod --version 查看 MongoDB 服务端版本信息
2 mongo 启动 Mongo Shell 进入交互模式
3 db 查看当前使用的数据库
4 use bishe 切换(或创建)数据库 bishe
5 db 验证当前数据库
6 show collections 查看该数据库下所有集合
7 show tables 与 show collections 等价,查看该数据库下所有集合
8 db.xuanti.count() 统计集合 xuanti 的文档数量
9 db.getCollection(‘2023’).countDocuments({}) 统计集合 2023 的行数

注:不建议给集合用数字作为开头命名,mongodb无法识别,查询语法较为困难。需要使用特殊函数,db.getCollection() 是一个专门的函数,它的作用就是强制 mongosh 客户端:“请把括号里的内容原封不动地当作字符串 (String) 类型来处理,然后去数据库里找这个名字的集合”。

在这里插入图片描述

db.getCollection('2023').findOne()
# 显示一条数据,可以看到所有可用的字段名了。
mongoexport --db=bishe --collection=2023 --type=csv --fields=_id,课题名称,指导教师姓名,指导教师工号,选题学生姓名,选题学生学号,专业,班级 --out="E:\NoSQL\MongodbShiXun\ahstu2023bishe.csv"

命令详解:
–db=bishe: 您的数据库。
–collection=2023: 导出的集合。
–type=csv: 导出为 CSV 文件。
–fields=_id,课题名称,指导教师姓名,指导教师工号,选题学生姓名,选题学生学号,专业,班级,(关键) 从 findOne() 结果中获取的、用逗号分隔的所有字段列表。 ------这里你想输出哪些字段就填写那些字段名称,中间用逗号分隔
–out=“E:\NoSQL\MongodbShiXun\ahstu2023bishe.csv”
指定的完整输出路径和文件名


至此完成了安装并配置MongoDB数据库。将.xlsx 文件转为 .csv 格式,并在终端启动数据库,通过命令终端将xls格式数据导入MongoDB数据库,完成导入导出操作。

三、通过Pycharm将xls格式数据导入MongoDB数据库,并实现导出操作。

注意:Python读取的csv文件,不要进行 UTF-8 格式转换
把文件和查询要放到同一路径下

3.1写入文件

import xlrd # 用来读取 .xls 格式的 Excel 文件;
import json # 将 Python 字典与 JSON 格式互转;
import pymongo # 用于连接并操作 MongoDB。
# 连接数据库
client = pymongo.MongoClient('localhost', 27017)
mydb= client['bishe']
info = mydb['xuanti']
# 这里建立了一个 MongoDB 连接,主机是 localhost,端口 27017。
# 并且指定了数据库 bishe 和集合(表)xuantiti。
#读取Excel文件
data = xlrd.open_workbook('bishexuanti.xls')
table = data.sheets()[0]
# 读取excel第一行数据作为存入mongodb的字段名
rowstag = table.row_values(0) # 取出第一行的所有单元格(Excel 的表头字段名)。
nrows = table.nrows  # 取出 Excel 的总行数,用于循环。
returnData = {}  # 用来暂存每行的数据。
for i in range(1, nrows):
# 将字段名和excel数据存储为字典形式,并转换为json格式
returnData[i] = json.dumps(dict(zip(rowstag, table.row_values(i))))
# 通过编解码还原数据
returnData[i] = json.loads(returnData[i])
info.insert_one(returnData[i])

注意:实际的文件名和数据库名需要和你自己的相匹配!

# 需要导入的两个包
pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple/ pymongo
pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple/ xlrd

这个程序的作用是:

从 Excel 文件(bishexuanti.xls)中读取数据,将每一行转换为 JSON 格式,再批量导入 MongoDB 数据库中的指定集合。

也就是一个数据迁移脚本:把 Excel 表格内容导入到 MongoDB。

不报错,运行成功,控制台不会有任何输出,这是正常的。

3.2导出文件

import pandas as pd
import pymongo
# 连接数据库
client = pymongo.MongoClient('localhost', 27017)
mydb= client['bishe']
info = mydb['xuanti']
# 将mongodb中的数据读出
data = pd.DataFrame(list(info.find()))
# 保存为csv格式
data.to_csv('data.csv', encoding='GB2312')
# 推荐导出为 UTF-8 带 BOM,Excel 可直接打开
# data.to_csv('data.csv', encoding='utf-8-sig', index=False)
# 保存为xls格式
#data.to_excel('data.xls', encoding='GB2312')

笔者在 该步骤发生两次报错
报错一:
从 Python 3.10 起有些类型迁到了 collections.abc,于是就出现
ImportError: cannot import name ‘MutableMapping’ from ‘collections’
执行了卸载命令:
pip uninstall bson pymongo -y
安装新版的pymongo包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple “pymongo>=4.7,<5”

报错二
报错行:data.to_csv(‘data.csv’, encoding=‘GB2312’)
报错信息:UnicodeEncodeError: ‘gb2312’ codec can’t encode character ‘\u740e’ in position 65: illegal multibyte sequence
‘gb2312’ 是简体中文编码,只能表示大部分汉字,但不能表示所有汉字(尤其是生僻字、繁体字、特殊符号、Emoji 等)。
\u740e 是一个生僻汉字(例如“琎”“琮”“瑶”类字),GB2312 中不存在,于是报错:“无法编码该字符”。
解决方法—改用 UTF-8 编码,最通用的编码,支持所有字符,不会乱码。
data.to_csv(‘data.csv’, encoding=‘utf-8-sig’)
1.utf-8-sig 比 utf-8 多了 BOM,可以让 Windows Excel 正确识别中文。
2.如果只在 Linux 或 Python 中用,写 utf-8 也可以。

在这里插入图片描述

运行成功,命令行无输出,会在当前路径下生成一个.csv文件,可以在pycharm中直接查看数据,也可以根据相关路径去查看

至此完成了通过Pycharm将xls格式数据导入MongoDB数据库,并实现导出操作。

四、通过图形界面将xls格式数据导入MongoDB数据库

在这里插入图片描述
在图形化界面操作中,笔者使用了老师推荐的NoSQLBooster for MongoDB,该软件初始界面为英文,可读性较差,但是导入导出文件的标识很清楚,有一定可操作性
Navicat Premium Lite 17,这款软件是之前MySQL课程使用的,也能与进行连接及查询操作,支持较多数据库和数据源,方便使用。
DataGrip 2021.2.2,这款软件来自于 JetBrains 推出的跨数据库管理工具,具有良好的跨数据库统一体验 + 高效的查询编写,支持众多AI插件,方便后续书写查询语句。导出功能强大,支持导出多种格式,数据上传等需对软件有一定了解,不如NoSQLBooster for MongoDB清晰。

需要在终端启动mongoDB,才能在图形化界面连接。连接时不需要密码,选择mongodb数据库默认选项确定即可。
在这里插入图片描述
最上方的红框,导入导出数据,导入后直接点击就可以查看

至此完成了通过图形界面将xls格式数据导入MongoDB数据库,并导出的所有操作。

posted on 2025-12-13 08:06  ljbguanli  阅读(47)  评论(0)    收藏  举报