Mongo运行脚本的方式也是有多种,首先我们先对各种模式有一个初步的了解与其特点的区分,然后讲解使用其中一种来解决我需要解决的实际问题。

 

以下内容参考博客:

<<EOF

  1. 交互式mongo shell

说明:其实就是我们使用mongo客户端程序连接上mongo服务以后,在其服务器内进行操作的方式,和mysql的操作方式一样的

 

格式:#mongo --port 27017

>>use test

>>db.users.findOne()

 

  1. Mongo --eval 运行一段脚本内容

说明:不进入交互模式,直接在指令之后接脚本内容

格式:#mongo ip:/port/dbname --eval “command”

例:

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

 

  1. 在os命令行下,运行一个js文件

说明:不进入交互模式,直接在指令之后接脚本文件

格式:#mongo ip:/port/dbname filename.js

例:

#mongo 127.0.0.1:27017/test userfindone.js

userfindone.js 的内容:

printjson(db.users.findOne());

 

  1. 在mongo shell的交互模式下,使用load命令运行一个js文件

说明:进入交互模式,然后使用load命令加载运行的js文件

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

在mongo shell下查看当前工作路径的方法: pwd( )

当前工作路径就是我们启动mongo shell时,当前用户所处的路径。

格式:#load(“xxxxx.js”)

 

例:

#mongo test

》load("/root/mongojs/userfindone.js")

 

  1. 在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多个表,表里面都有数据,因为是接手别人的项目,没有创建表的原始脚本,删除了不好回复,每次程序启动都需要将这些表导入,所以不能删除,导入表时,数据导入的工作量巨大,但是数据我们是不需要的,所以现在我想批量将表内数据删除,保留表,实现这样的功能。