序言
兴趣使然,突发奇想,想到了就写,就当打发时间了。
一、使用 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
所以需要把 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
方法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 查看的测试数据类型:
笔者经过数轮 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 连接工具
如果是用其导入csv 文件数据,大概率会遇到中文乱码问题,还有字段格式问题,比如数字会大概率转换为字符串数字,导出 csv 文件时,时间格式会有问题,自动给你转换成一个 UTC 世界时间,而不是北京时间(东八区时区)
中文乱码解决方法传送门:
Windows10 Excel 如.csv文件编码问题转为 UTF-8 编码方法,解决中文乱码问题(如MongoDB导入 CSV 文件中文乱码问题)、解决科学计数显示问题
三、按时间过滤导出(随手一记)
传送门:
mongoexport带过滤条件导出