用mongodb存的我们的数据,现在要往里面倒入一些数据,主要是人家给的一个excel文件,大体内容是这样的

mongodb 导出csv中文乱码 mongodb导入csv文件_mongodb

本来上边的表头都是中文的,为了使用mongodb的导入功能,我把他们都改成对应的代码里model的字段了

mongodb 导出csv中文乱码 mongodb导入csv文件_字段_02

我这里不说详细步骤只说大概思路以及遇到的问题

1.首先mongodb是不支持excel导入的,但他支持csv,tsv等导入,所以你只要把这个excel另存为csv格式的就行,注意,这里要看你留不留表头,后面会说为什么。

2.之后就是输入命令了,如果实在windows下,注意,不要用mongo的命令连接,在他的命令行里输入导入命令,要window键+r打开cmd在这里名输入命令,你要是没配环境变量,那就到对应的mongodb文件夹有mongoimport那个玩意的文件夹,然后在此处打开命令行什么的

3,cmd输入命令

mongoimport -v --host ip:27017 --username mongo用户名 --password 密码--authenticationDatabase 数据库名 -d 数据库名 -c 你要存的collection名 --file 文件全路径 --type csv --drop --headerline

由于我们之前的excel里表头没删除,所以csv文件里

mongodb 导出csv中文乱码 mongodb导入csv文件_mongodb_03

有这样一行,--headerline就是干这个用的,他会把csv第一行当成键(列名),如果你的excel里没这行,那就不能用--headerline,而要用field那个,不详细写了,这个写的人很多

要注意,3.4版本里才开始支持--columnsHaveTypes这个参数,我用的3.0,老报错 error parsing command line options: unknown option  "columnsHaveTypes"

mongodb 导出csv中文乱码 mongodb导入csv文件_mongoimport_04

我为什么要提这个呢,因为我们数据库被要求所有字段全都存String类型的,像表中数据0,1这种数字的01这种的全都被mongodb默认转成了int32,然后,3.0就是不支持这个指定类型,试了很多方法,用field指定什么的都不行,最后没辙了

采取以下手段

mongodb 导出csv中文乱码 mongodb导入csv文件_mongodb_05

填进去的全查出来,这样model默认把0,1全都变成String了,像原来是01的,现在只剩下1了,就特殊处理下,加个0,然后save,这里由于我们是以其中一个字段作为id主键的,所以save只是更新了数据库的每一个文档记录,把对应的字段都改成了String了