Linux在shell脚本中执行MongoDB命令

方式一 直接在shell中嵌入MongoDB命令

使用 /usr/bin/mongo <
  • EOF是End Of File的意思,只是一个标记,也可以替换为其他字符串
  • <<表示标准输入重定向
  • 两者配合,就是将一对EOF标记中的内容作为标准输入传递给程序
  • 在配合上mongo命令,就是将内容传递给mongo,这样直接写MongoDB的命令就行
# create super DBA dba_root and DBA of pxjz dbz_pxjz /usr/bin/mongo <

执行结果
Linux在shell脚本中执行MongoDB命令
文章图片

方式二 编写单独的mongo脚本
单独创建一个js脚本,在其中输入要执行的mongo命令,然后执行该脚本
  • 编写脚本然后使用mongo xxx.js执行该脚本
  • 需要注意的是,mongo脚本和一般的js文件还有些区别,用官方的话说就是,不能在JavaScript文件中使用任何shell帮助程序(例如,使用,show dbs等),因为它们不是有效的JavaScript,但有替换的方法,参见下表
Shell帮助 等价JavaScript
show dbs, show databases db.adminCommand('listDatabases')
use db = db.getSiblingDB('')
show collections db.getCollectionNames()
show users db.getUsers()
show roles db.getRoles({showBuiltinRoles: true})
show log db.adminCommand({ 'getLog' : '' })
show logs db.adminCommand({ 'getLog' : '*' })
it cursor = db.collection.find() if ( cursor.hasNext() ){ cursor.next(); }
所以在编写脚本的时候,如果用到左侧列出的Shell帮助,记得替换为右侧列对应的JS
// create super DBA 'dba_root' and DBA of pxjz 'dbz_pxjz' db = db.getSiblingDB('admin'); isRootExist = (!!db.system.users.findOne({user:'dba_root'})); isPxjzExist = (!!db.system.users.findOne({user:'dba_pxjz'})); // create super DBA !isRootExist ? db.createUser({ user: 'dba_root', pwd: '123', customData: {desc: '超级管理员'}, roles: ['root'] }) : '超级管理员已经存在'; // create DBA of pxjz db = db.getSiblingDB('pxjz'); !isPxjzExist ? db.createUser({ user: 'dba_pxjz', pwd: '123', customData: {desc: 'pxjz数据库管理员'}, roles: [ {role: 'readWrite', db: 'pxjz'}, {role: 'dbAdmin', db: 'pxjz'}, {role: 'userAdmin', db: 'pxjz'} ] }) : 'pxjz数据管理员已经存在';

执行结果
【Linux在shell脚本中执行MongoDB命令】Linux在shell脚本中执行MongoDB命令
文章图片

    推荐阅读