Mongo运行脚本的方式也是有多种,首先我们先对各种模式有一个初步的了解与其特点的区分,然后讲解使用其中一种来解决我需要解决的实际问题。
以下内容参考博客:
<<EOF
- 交互式mongo shell
说明:其实就是我们使用mongo客户端程序连接上mongo服务以后,在其服务器内进行操作的方式,和mysql的操作方式一样的
格式:#mongo --port 27017
>>use test
>>db.users.findOne()
- Mongo --eval 运行一段脚本内容
说明:不进入交互模式,直接在指令之后接脚本内容
格式:#mongo ip:/port/dbname --eval “command”
例:
#mongo 127.0.0.1:27017/test --eval "printjson(db.users.findOne())"
- 在os命令行下,运行一个js文件
说明:不进入交互模式,直接在指令之后接脚本文件
格式:#mongo ip:/port/dbname filename.js
例:
#mongo 127.0.0.1:27017/test userfindone.js
userfindone.js 的内容:
printjson(db.users.findOne());
- 在mongo shell的交互模式下,使用load命令运行一个js文件
说明:进入交互模式,然后使用load命令加载运行的js文件
load() 参数中的文件路径,既可以是相对路径,也可以是绝对路径。
在mongo shell下查看当前工作路径的方法: pwd( )
当前工作路径就是我们启动mongo shell时,当前用户所处的路径。
格式:#load(“xxxxx.js”)
例:
#mongo test
》load("/root/mongojs/userfindone.js")
- 在os命令行下,运行js文件
说明:这一条和第三条相向,不同之处在于第三条是在命令行中直接连接了数据库,然后运行了js文件,这一条是在命令行中先运行js文件,在js文件中进行了数据库的连接。
格式:mongo --nodb xxx.js
例:
Js内容如下:
conn = new Mongo("192.168.1.45:29017");
db = conn.getDB("local");
printjson(db.startup_log.findOne());
注意:
以上所有命令,如果连接的数据库是 127.0.0.1:27017 ,则,主机和端口可以省略,例如:
mongo test --eval "printjson(db.users.findOne())"
EOF内容参考博客end
在mongo shell里面使用文本编辑器编辑Javascript代码,首先需要在Linux系统里面指定环境变量如EDITOR=vim,然后如下所示:
MongoDB shell version: 2.2.0
> function f() {}> edit function f() {
print("this really works");
}> f()this really works
有了以上知识,下面来实战解决我的需求。
需求描述:现在我的数据库中有4000多个表,表里面都有数据,因为是接手别人的项目,没有创建表的原始脚本,删除了不好回复,每次程序启动都需要将这些表导入,所以不能删除,导入表时,数据导入的工作量巨大,但是数据我们是不需要的,所以现在我想批量将表内数据删除,保留表,实现这样的功能。