MongoDB 运行 js 脚本

 

我们通常通过 Mongo Shell 访问 MongoDB Server,在 shell 中执行指令以完成各种操作,比如说复制集初始化、用户添加等等。但是,在实际过程中运维过程中有些操作是固定常用的,类似这些操作我们可以将其写入 js 文件,在Linux的 shell 中执行 mongo xxx.js 这样指令完成我们的操作。

添加用户

1: 编写脚本:

// file name create-user.js
//

//var conn = new Mongo("t420i");
//var db = conn.getDB("admin")

var userName = "chengchao"

var console = console || {}
console.log = console.log || print
console.json = console.json || printjson
console.debug = console.debug || print

let dbAdmin = db.getSiblingDB("admin")
print(" ========= ")
var useExists = (dbAdmin.getUser(userName) != null)
if (useExists) {
    console.log("用户已经存在")
} else {
    printjson(dbAdmin.runCommand({
        createUser :  userName,
        pwd : "A12345^7b",
        roles : [{
            role : "root",
            db : "admin"
        }]
       
    }))
}


var users = dbAdmin.getUsers()

users.map(x => { 
    var u = x.user
    console.log("=>", u)
});

print(" ========= ")

2: 运行命令:

$ mongo --host=t420i create-user.js 
MongoDB shell version v4.2.6
connecting to: mongodb://t420i:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("44ced561-219b-4f3b-ae21-700e9e44cf99") }
MongoDB server version: 4.2.1
...

需要特别注意的是在 Mongo Shell 中使用的 use adminshow usersshow collections 指令以及类似的指令不能出现在 js 文件中。因为它不是 JavaScript 语法,我们只能在 js 文件调用对应的方法去执行相应的操操作。

// 切换数据库,类似于 use 操作
db.getSiblingDB("xxx")

// 在对应的数据库上执行指令
db.getSiblingDB("xxx").runCommand({xxxx})

// 倘若是需要在 admin 数据库上执行指令,更简单
db.adminCommand({xxx})

参考:

  • https://docs.mongodb.com/manual/mongo/

EOF


Power by TeXt.