作为一个专业文档型数据库,MongoDB有一个很大的优势,就是使用JavaScript使用、管理数据库,所以也能够使用JavaScript脚本进行复杂的管理,就像Oracle中使用自定义函数、存储过程一样使用、管理数据库。

mongodb 的shell是javascript实现的,如果直接使用javascript实现相应的功能则显得很直观和简便。运行JavaScript脚本有四种[1]方式:

(1) 交互式 mongo shell

大部分的 mongodb 教程,在第一章都会讲解这种方式。

mongo 127.0.0.1:27017
use test
db.users.findOne()

(2) mongo --eval 运行一段脚本

不进入交互模式,直接在 OS 的命令行下运行一段mongodb脚本。

mongo 127.0.0.1:27017/test --eval "printjson(db.users.findOne())"

(3) 在OS命令行下,运行一个js文件

mongo 127.0.0.1:27017/test userfindone.js

userfindone.js 的内容:
printjson(db.users.findOne());

(4) 在mongo shell 交互模式下,运行一个js文件

mongo test
load("/root/mongojs/userfindone.js")

其中,load() 参数中的文件路径,既可以是相对路径,也可以是绝对路径。

本文采用第3种方案,直接中windows OS环境下,在cmd中运行命令。

1. 如何将mongo查询结果导出到文件中

(1)新建一个js文件,将查询方法写进去,如query1201.js,文件内容如下

var c = db.getCollection('DJXX_WLW_SJKZ').find({jh:{"$in":["X1-001","X1-002","X1-005","X2-002","X3-005"]},cjsj:{"$ne":"N/A"},dataCode:200},{jh:1,sgtsj:1,dltsj:1,cjsj:1}).sort({cjsj:-1})
while(c.hasNext()) {printjson(c.next());
}

(2)输入OS Shell命令来执行

mongo mongodb://192.168.*.**:27017/xxxx --username XXXX --password **** query1201.js >result1201.json

这样查询的结果就会直接生成在当前文件夹下的result1201.js文件中

2. 将JSON格式文本文件输入导入到数据库中

启动windows环境下的MongoDB数据库[2]。

D:\mongodb\bin>mongod -config d:\mongodb\conf\mongod.cfg
2019-03-08T21:04:07.460+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-03-08T21:04:07.464+0800 I CONTROL  [main] log file "D:\mongodb\log\mongodb.log" exists; moved to "D:\mongodb\log\mongodb.log.2019-03-08T13-04-07".

使用Mongo客户端,新创建Collection为

D:\mongodb\bin>mongo
MongoDB shell version v4.0.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.0
Welcome to the MongoDB shell.
......
MongoDB Enterprise > show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
mytest  0.180GB
MongoDB Enterprise > use mytest
switched to db mytest
MongoDB Enterprise > db.createCollection("DJXX_WLW_SJKZ")

使用mongoimport命令从文件中,导入数据。

D:\mongodb\bin>mongoimport/bypassDocumentValidation --db mytest --collection DJXX_WLW_SJKZ --file G:\result1201a.json
2019-03-09T19:36:22.365+0800    connected to: localhost
2019-03-09T19:36:24.349+0800    [........................] mytest.DJXX_WLW_SJKZ    23.3MB/3.67GB (0.6%)
2019-03-09T19:36:30.345+0800    [........................] mytest.DJXX_WLW_SJKZ    114MB/3.67GB (3.0%)  3.66GB/3.67GB (99.7%)
2019-03-09T19:37:18.345+0800    [#####...................] mytest.DJXX_WLW_SJKZ    824MB/3.67GB (21.9%)
......
2019-03-09T19:40:31.082+0800    [########################] mytest.DJXX_WLW_SJKZ    3.67GB/3.67GB (100.0%)
2019-03-09T19:40:31.082+0800    imported 785788 documents

3. 导入数据过程中,所遇到的问题

导入数据过程中,所遇到的问题是导出JSON文件格式问题,提示错误如下:

D:\mongodb\bin>mongoimport/bypassDocumentValidation --db mytest --collection DJXX_WLW_SJKZ --file G:\result1201.json
2019-03-09T22:35:33.685+0800    connected to: localhost
2019-03-09T22:35:33.739+0800    Failed: error processing document #1: invalid character 'o' in literal MaxKey or MinKey (expecting 'a' or 'i')
2019-03-09T22:35:33.740+0800    imported 0 documents

打开JSON数据文件,发现多出4行开头文本描述,内容如下(属于命令行重定向输出问题,有办法解决吗?欢迎指导):

<class 'str'> MongoDB shell version v4.0.0
<class 'str'> connecting to: mongodb://192.168.*.***:27017/xxxx
<class 'str'> MongoDB server version: 3.4.14
<class 'str'> WARNING: shell and server versions do not match

由于JSON数据文件达到3.6G,一般编辑器打不开,为此使用Python编段小程序查看,并删除此四行文本内容。

补充:

关于权限问题。
mongoimport --username dba --password 123456 --db dev --collection DJXX_WLW_SJKZ --file /home/python/下载/result201903a.json --authenticationDatabase admin

这里重点是**–authenticationDatabase admin**参数,因为用户是在admin数据库中,权限验证需要到admin中。

对于Python中的用法如下:
client = pymongo.MongoClient(‘mongodb://dba:123456@192.168.1.200:27017/admin?authMechanism=SCRAM-SHA-1’)
db = client[“dev”]
collection = db[“DJXX_WLW_SJKZ”]

(1)导出需要的数据,例如_id就不需要到出,再用空间:

var c = db.getCollection('DJXX_YCDT').find({},{"jh":1,"cjsj":1,"cjsj_ny":1,"bj":1,"yy":1,"ty":1,"cyl":1,"hs":1,"cc":1,"cc2":1,"cc_ll":1,"cc2_ll":1,"sxdl":1,"xxdl":1,"sgtds":1,"sgtsj":1,"zdzh":1,"zxzh":1,"yzz":1,"gzz":1,"djgkyy_sys":1,"djgkyybh_sys":1,"zt":1,"dym":1,"cmd":1,"ly":1,"errorCount":1,"_id":0})
while(c.hasNext()) {str = c.next()str.llcc = str.cc_lldelete str.cc_llstr.llcc2 = str.cc2_lldelete str.cc2_llprintjson(str);}

(2)对于超大文件编辑(大于2G),前面说到多出四行内容,解决方案是再Linux下,使用vim编辑器编辑,删除此四行保存即可。

参考:
[1]《mongodb shell 运行js脚本的四种方式》 CSDN博客 wershest 2017.06
[2]《Python开发中使用Mongo DB入门实践》 CSDN博客 肖永威 2018.07
[3]《Failed: error connecting to db server: server returned error on SASL authentication step: Authentica》CSDN博客 雅冰石 2015.06

如何将mongo查询结果导出到文件中以及导入到另一个Mongo库中相关推荐

  1. pythonmysql查询转list_使用Python将Mysql的查询数据导出到文件的方法

    mysql官方提供了很多种connector,其中包括python的connector. 下载地址在:http://dev.mysql.com/downloads/connector/python/ ...

  2. MySQL查询结果导出到文件

    转载链接:http://eric-gcm.iteye.com/blog/1127734 选择某些行作为需要的数据 SELECT id,dbname FROM `index` into outfile ...

  3. mysql dump 到的文件_mysql查询结果导出到文件

    方法一: 直接执行命令: mysql> select count(1) from table into outfile '/tmp/test.xls'; Query OK, 31 rows af ...

  4. springboot mongo查询固定字段_你真的会用索引么?[Mongo]

    一次奇怪的查询经历 如何奇怪了? 对同一张表,用同样的SQL,查询200万条数据耗时100ms,查询二十条数据却耗时30s. 数据量少了10万倍,完全不是一个数量级的数据,耗时却多了300倍. 明明加 ...

  5. mysql 导出dmp文件_PLSQL Developer导入导出表数据结构

    一.导出数据结构和表数据 导出表结构: 找到工具-->导出用户对象-->选择当前用户-->导出文件为xxx.sql位置自己选择(导出的只是数据结构) 导出表数据: 找到工具--> ...

  6. ue4怎么导出fbx文件_【教程】Houdini Engine在UE4中的基本使用(一)

    后续文章更新移步→微信公众号"虚幻社区"(mantra-xhsq),您的支持是我创作的动力. 在读本篇文章之前大家最好搞懂"程序化建模"的概念. 1.Houdi ...

  7. Scratch二次开发:关于增加的扩展导出sb3文件后,导入文件失败问题

    这里写自定义目录标题 问题描述: 解决方案: 问题描述: 无论是通过vm的extension增加扩展,还是通过scratch-blocks编译增加扩展块,直接保存作品文件后,再次导入作品文件失败. 解 ...

  8. java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...

    Super CSV是读取/解析,验证和映射CSV文件到POJO的绝佳选择! 我们(Super CSV团队)刚刚发布了一个新版本(您可以从SourceForge或Maven下载它). 读取CSV文件 以 ...

  9. Java根据txt文件数据得到list_java中如何将一个txt文件中的数字读取到一个ArrayList集合中?...

    展开全部 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java ...

最新文章

  1. ceph PG设计,状态机,peering,recovery 导图
  2. Maven 让事情变得简单
  3. 反思项目最新周数的反复反复修改
  4. 大数据图数据库之离线挖掘计算模型
  5. HTMl5的存储方式sessionStorage和localStorage详解
  6. opencv运行出现错误
  7. XML是什么,它能够做什么?——写给XML入门者
  8. python二维数据读取对齐_python代码要严格对齐
  9. Jmeter性能测试之如何写Java请求测试用例类
  10. 大神级ppt作品欣赏_超写实绘画,逼真到让你怀疑自己的双眼,各路超写实大神作品欣赏...
  11. centos7设置键盘类型_CentOS7设置中文输入法
  12. 杂项-TMod:常见错误
  13. day9Python操作Excel
  14. RobotStudio实现喷漆、打磨等功能(曲面路径生成与仿真)
  15. 多重影分身之术!快来领取属于自己的个人智能助手!
  16. 努比亚修复工具_努比亚Play刷机包(官方刷机完整固件升级包V2)
  17. 电子计算机厂房火灾危险性,厂房建筑设计防火规范(57页)-原创力文档
  18. P1010 [NOIP1998 普及组] 幂次方 递归模拟
  19. 中国银联DNA手机支付接口
  20. 基于Pycharm运行李沐老师的深度学习课程代码

热门文章

  1. Java+SSM网上订餐系统点餐餐厅系统(含源码+论文+答辩PPT等)
  2. Latex导入pgf图片
  3. XML生成XSD的方法
  4. Informatica保障江苏电信规范化ETL开发
  5. “专精特新”背后的京东动力
  6. Integer装箱拆箱、参数传递
  7. C/C++---字符分布分割得到数字,适用于STM32/ESP32等等
  8. Android中播放本地SD卡中歌曲需要的添加的权限
  9. 怎么画思维导图?玩转MindNow六大思维结构
  10. 为什么说,百度SEO是经验主义?