MongoDB操作
Posted 临风而眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB操作相关的知识,希望对你有一定的参考价值。
MongoDB操作(6):导入和导出
注意!不是在mongo命令行下操作!是另开终端操作!
文章目录
踩坑记录:
第一次导出mongodb数据库,在网上搜了一波教程,赶紧开始实操,结果我还拿了这些错误类型去搜…
unexpected token: numeric literal :
unexpected token: numeric literal :
截图只是一部分,然后我突然想到mongodump这个指令也要另开终端来执行,然后立马试了下mongoexport本身是不是会报错,果真显示mongoexport is not defined
发现问题后,赶紧导出
成功了:
说明:上面这个截图上面在终端里写了IP地址和端口号,但在本机上操作可以不写,下面的演示都不写
一.导入
详细介绍:mongodb中文手册
1.导入csv
针对没有设置密码的mongodb ,有密码的还要加上 -u 用户名 还要 -p 密码
常用格式命令:
mongoimport -d dbname -c collectionname --file filename --type=csv -f field
-d 数据库的名字
-c 集合名字
--file 要导入的文件(要写路径)
--type 导入的文件类型 ,默认是json
-f 要导入的字段(指明要导入那些列)
--headerline:表示文件中的第一行作为数据头
#查到很多博客的另一种说法:指明不导入第一行,因为第一行是每一列的名称(作为key)
注:若mongoimport插入数据到之前没有创建的数据库和集合,则会自动创建
type后面的=可以不写
--headerline 和-f不能同时出现! 但-f、–headerline、–fieldFile必须有一个(看后面的解释)
无限踩坑记录…救命…
–headerline和-f
给我整无语的踩坑探索:
一开始理解错了headerline
不少博客上说–headerline的意思是:”headerline表示第一行为属性名不用导入“,然后又看到*“–headerline是第一列不用导入”*
我:???
我要导入豆瓣电影数据
我以为headerline是那个最左边那个序号1、2、3、4、5…
后来细品网友的解释,终于知其意…
headerline就是前面那个第一行:名字、投票人数、类型
前面说了--headerline
和-f
还有--fieldFile
必须有一个,先来单独看--headerline
:
果真:第一行作为列的名称, 作为了key ,表格的其他行都是value
插播:
原本这份文档是xlsx格式,被我硬另存为csv了:
网上说是要用这种标注了UTF-8的csv防止乱码
这样子看着上映时间乱码,其实用vscode这样的文本编辑器打开,是没有乱码的
网上看到说修改csv就要在文本编辑器里修改,不要在excel里面修改
官方文档也各种没看懂
因为查了不少博客,有的说-f 有的说 --fileds,那是给我看的军头转向…
仔细一品 这个中括号 意思是不是 括号里面和外面的那个写法等价?
试一试 --db和-d是不是一样的
怀着心态崩溃的心情,先试一试–db和那个-d是不是一样的,如果,果真效果是一样的
注:–headerline写在了后面,写的位置不要紧
先来看看-f指定一个字段效果会咋样
第一个键是我指定的”电影名字“,后面分别是自动给的field1,field2,直到field8
牛津词典上field有字段的中文意思
把-f换成–fields试一下
注意,出现下面这个错误,是因为–fields写成了-fields
结果:
此时确实指定的字段都成为了键
但是第一行出问题了… 而前面-f只指定了一个的时候却不会把csv的第一行变成值,
难道 -f 和 --fields还是有区别??
看不懂文档,就实操,可是更奇怪的事情发生了
用find()查询,第二条数据却是表格的第一行…麻了…什么鬼问题啊…
难道字段加引号有问题?
看了下别人的博客…每加引号
还是有那个问题…
难道是中文字段的问题?
一般中文都比较容易出问题
那我就换成英文
在前两条数据确实没发现
但因为上面发现导入数据库的时候会有顺序问题,所以用find找一下
果真找到了…而且其实就在第三条数据…
开始怀疑headerline
之前看headerline不会是我没看清楚吧,不会也有"名字":"名字“吧?
赶紧试一下
结果是 没有!!
而且其他方式都是插入38723条数据
–headerline是插入38722条数据…
那放心了
fieldFile
菜狗尝试努力理解官方文档
file with fields name - one per line,那就是写了字段名字的文件, 每行写一个字段
我在桌面新建一个txt文件
理解的没错,但菜狗搞了三次,第一次–写成了-
第二次test.txt写成了a.txt
总结
网上只有大量重复的解释那几个常用字段的博客,我花了这么多时间探索这个有点浪费时间,先放着
此处待解决! ! !
但其实要解决的话只要把那条多余的数据删掉就行了… 只是这里想探究一下问题…😭
或者在文本编辑器里面,把字段修改好了,再加上–headerline导入 !
至于upsert等参数,还没有研究过,可以看看这个总结的很好的
2.导入json
常用格式命令:
mongoimport -d dbname -c collectionname --file filename --type=json
-d 数据库的名字
-c 集合名字
--file 要导入的文件(要写路径)
--type 导入的文件类型 ,默认是json(等号可以不写!)
注意:
导入json不能使用-f 或者–fields或者–fieldFile
未解决疑问
导入json不能使用-f 或者–fields或者–fieldFile,那有什么相同功能针对json的吗?..
二.导出
看官方文档的时候还要注意版本
看到这里的时候我去看了一下自己的版本
还是注意,不要在mongo命令行里面用
1.导出csv
把先前导入的csv文件再导出去…
常用格式命令:
mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -q 条件导出 --csv -o 文件名
必须要有-f 提供字段
不然会报错:
第一个给出字段”m“而实际上没有,那就导出空的csv,第二个我给的名字字段是有的,于是成功导出了
试水-q字段…心态又炸了
这不把人心态搞崩… 主要就是格式问题
其中查了几个
mongo报错 is not valid JSON: json
windows上操作-q后面要加双引号
error parsing command line options: too many positional arguments:
StackOverflow上面这个说csv那个可能有空格 比如 名字 ,评分 ,
可我打开vscode看了一下,没有
最终问题还是固定在了 Failed: error parsing query as Extended JSON: invalid JSON input
找到StackOverflow的回答
极其怀疑是中文的问题吧!
重新创建一个movie_data3,把几个字段改成英文…
成功导入数据库
心态逐渐崩溃
-q 后面的东西改了无数次…rnmd,想砸电脑了
关键是rnmd 官方文档也坑我啊!
我输入了
mongoexport --help
其实关于-q的解释是这样的:
querying options:
/q, /query:<json> query filter, as a JSON
string, e.g., '{x:{$gt:1}}'
query filter (JSON)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n8DJFtkP-1629178379562)(https://cdn.jsdelivr.net/gh/xin007-kong/picture_new/img/20210817131018.png)]
你这个eg给的… 不是标准json啊…
黎明的那道光
查到一个也踩了很多坑的兄弟:踩坑——Mongodb mongoexport -q 的使用
可惜他的最终解决方案是-q后面的json要用单引号括起来,我这windows只能用双引号
然而windows用双引号wnmd试了无数次了,如果写成标准的json,他双引号到底是把哪一个括起来都会识别错误
再度绝望
官方文档犯的就是这个错误
用一个StackOverflow上的回答来说,那个是js不是json
复行数十步,豁然开朗!!!!!!!!!!!!!
查到了这篇博客MongoDB导出工具mongoexport在复杂查询条件下的使用
这位博主说的json可能在终端里面格式不对…太一针见血了…
可惜标准json的格式我不是很确定,所以这样尝试也失败了多次
然后我想想能不能直接用json,别用txt了,就用可以报错纠正json格式的vscode搞好了!!!
成功了!差点跳起来!
然后把这个json后缀改成txt形式,也可以成功,主要就是json格式要标准
燃起来了!
菜!但嚣张!
2.导出json
开头引入就是导出了json
再多试一个参数–pretty,可以将json串格式化为带格式的json串
三.总结
- 其实一开始要导出数据的时候,我的第一想法是之前学过的mongodump备份,但想想应该会有专门的操作,于是就去查了一下,没想到把自己心态搞崩了
然后去稍微查了一下他们的区别,没有深入了解
-
呜呜呜
本来按理说很容易的操作,给我折腾了这么久…
当没有很好的教程时,官方文档应该就是最好的解释,但是阅读官方文档能力属实有点弱…
-
这篇博客好乱…
-
数据库少用中文!少用中文!少用中文!避免麻烦
-
看这篇博客的读者肯定会感觉这篇没啥用呜呜呜…我只是把我的问题说出来了,没有把能直接用的东西干练的总结出来
(下次一定)(bushi
- 搜到一个博客说…用可视化工具导入导出只要点几下就🆗,我要🔥速去下载可视化工具
以上是关于MongoDB操作的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
VSCode自定义代码片段15——git命令操作一个完整流程
ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项