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

栏目: 数据库 · 发布时间: 5年前

内容简介:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoyw/article/details/88336631

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoyw/article/details/88336631

作为一个专业文档型数据库,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 编段小程序查看,并删除此四行文本内容。

参考:

[1]《mongodb shell 运行js脚本的四种方式》 CSDN博客 wershest 2017.06

[2]《Python开发中使用Mongo DB入门实践》 CSDN博客 肖永威 2018.07


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

使用HTML5和Node构建超媒体API

使用HTML5和Node构建超媒体API

【美】Mike Amundsen(麦克.阿蒙森) / 臧秀涛 / 电子工业出版社 / 2014-5 / 55.00元

《使用HTML5和Node构建超媒体API》探讨了超媒体API 的设计,介绍了作为超媒体API 的构件块的超媒体因子,并讲解了基本格式、状态转移、领域风格和应用流程这4 种超媒体设计元素;之后作者结合具体的场景,通过3个动手实验章节,从超媒体因子和超媒体设计元素入手,用实际的代码向我们详细地演示了超媒体API 的设计;最后介绍了超媒体设计的文档编写、注册与发布等内容。 《使用HTML5和No......一起来看看 《使用HTML5和Node构建超媒体API》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具