序言

兴趣使然,突发奇想,想到了就写,就当打发时间了。

一、使用 csv 导入数据的命令方法

csv文件路径问题,绝对路径和相对路径都可以

方法1

type 没有=号,也是可以的,空格自动识别

测试表.csv 文件导入到 mongodatabase 库,mycollection 集合中,导入时必须指定列名称 (如果 csv 文件第一行是列名称,也会被当成数据导入到数据库中),这个方法在初始化 mongo 数据库集合时非常不好,除非是补充集合数据,就另当别论了

使用 ip:端口号 用户密码 连接mongoDB

mongoimport --host xxx.xxx.xx.xxx:9527 -u myuser -p 123456 -d mongodatabase -c mycollection --type csv --fields "name,sex,age" --file ./测试表.csv

–fields 指定导入到集合的字段名,如 name、sex、age 如果集合内存在这三个字段,那么csv 文件中的三个列数据会一一对应,比如 测试表.csv 内的测试数据如下所示:

name

sex

age

张三


20

李四


23

小明


18

(注意如果是补充集合的数据,那么 csv 文件内的 name、sex、age 行数据头,需要删除整行)只需要如下数据:

张三


20

李四


23

小明


18

张三


20

李四


23

小明


18

方法2 (推荐该导入命令方法,初始化MongoDB集合数据)

导入数据时,指定字段类型进行导入 (注意:csv文件第一行不要有字段名称)

演示模板:

mongoimport --host xxx.xxx.xx.xxx:9527 -u myuser -p 123456 -d mongodatabase -c mycollection --type csv --columnsHaveTypes --fields "name.string(),sex.string(),age.int32(),password.int32()" --file ./测试表.csv

这个可以指定导入的字段数据格式,如 name 和 sex 字段的数据可以指定为 字符串格式 string,age 字段的格式可以指定为 NumberInt()

有一个问题是如果数据内存在数字长度超过10个的数据,那么就会报如下错误:

2023-04-21T18:23:45.466+0800    Failed: type coercion failure in document #0 for column 'password', could not parse token '12345678901' to type int32
2023-04-21T18:23:45.466+0800    imported 0 documents

mongodb导出csv文件 mongodb导入csv_mongodb


所以需要把 int32() 改为 int64(),就会自动转换数字长度超过 10 个的数据为 NumberLong()

演示模板:

mongoimport --host xxx.xxx.xx.xxx:9527 -u myuser -p 123456 -d mongodatabase -c mycollection --type csv --columnsHaveTypes --fields "name.string(),sex.string(),age.int64(),password.int64()" --file ./测试表.csv

mongodb导出csv文件 mongodb导入csv_nosql_02

方法3

将测试表.csv文件导入到 mongodatabase 库,mycollection 集合中,使用 --headerline 参数,指定使用csv文件第一行内的字段名,作为文档的字段名称

mongoimport --host xxx.xxx.xx.xxx:9527 -u myuser -p 123456 -d mongodatabase -c mycollection --type csv --headerline --file ./测试表.csv

(作为初始化mongodb 数据库,稍微不错,有一点要注意,如果是纯数字的字段数据,那么会被自动识别为 NumberInt() 格式,比较长的会被识别为 NumberLong()

比如下面是笔者使用 Studio 3T 查看的测试数据类型:

mongodb导出csv文件 mongodb导入csv_mongodb导出csv文件_03

mongodb导出csv文件 mongodb导入csv_nosql_04


mongodb导出csv文件 mongodb导入csv_mongodb导出csv文件_05


笔者经过数轮 mongoimport 工具导入测试,测试得出,如果数字长度是小于等于10的数据,会自动转换为 NumberInt() 格式,如果是大于10的数字长度,就会转换为 NumberLong()

方法4 (这个我直接引用参考链接的说法)

不带-c参数导入数据,会使用文件名做为集合名,导入后集合名称为 czg_t2
mongoimport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d czg --type=csv --headerline /root/mongo_export/czg_t2.csv

这个一般都会指定导入的集合,也就不多说。


参考链接

1. MongoDB mongoimport 从csv导入数据指定字段类型

二、图形界面可视化导入方法

使用Studio 3T可视化mongodb 连接工具

mongodb导出csv文件 mongodb导入csv_数据_06

如果是用其导入csv 文件数据,大概率会遇到中文乱码问题,还有字段格式问题,比如数字会大概率转换为字符串数字,导出 csv 文件时,时间格式会有问题,自动给你转换成一个 UTC 世界时间,而不是北京时间(东八区时区)

中文乱码解决方法传送门:
Windows10 Excel 如.csv文件编码问题转为 UTF-8 编码方法,解决中文乱码问题(如MongoDB导入 CSV 文件中文乱码问题)、解决科学计数显示问题


三、按时间过滤导出(随手一记)

传送门:

mongoexport带过滤条件导出