如何从bash执行mongo命令?

Moi*_*nGK 10 bash shell mongodb

我试图从bash脚本运行此命令:

 mongo 192.168.10.20:27000 --eval "use admin && db.shutdownServer() && quit()"
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

[rs.initiate() && use admin && db.shutdownServer() && quit()] doesn't exist
Run Code Online (Sandbox Code Playgroud)

如何在不使用js文件的情况下执行此操作?

Ste*_*nie 18

交互式和脚本化mongoshell会话之间存在差异.特别是,类似use admin的命令不是有效的JavaScript,只能在交互式shell会话中使用.

shutdown命令行的工作等价物是:

mongo 192.168.10.20:27000/admin --eval "db.shutdownServer()"
Run Code Online (Sandbox Code Playgroud)

您可以包含要在连接字符串中使用的数据库,并且无需从脚本化的mongoshell会话中退出.

如果确实需要从脚本会话中更改数据库,则可以使用db.getSiblingDB()JavaScript函数.编写上面的shutdown命令的另一种方法是:

 mongo 192.168.10.20:27000 --eval "db=db.getSiblingDB('admin');db.shutdownServer()"
Run Code Online (Sandbox Code Playgroud)

  • @MoienGK是的,你可以把更长的JavaScript放在`--eval`中.根据我的第二个例子,用分号分隔多个语句. (2认同)

Ugu*_*gur 10

您可以使用heredoc语法.

#! /bin/sh
mongo <<EOF
use admin
db.shutdownServer()
quit()
exit
Run Code Online (Sandbox Code Playgroud)

事实证明,当bash脚本的末尾缺少EOF时,heredoc语法会抛出警告.这是bash脚本版本.

#! /bin/bash
mongo <<EOF
use admin
db.shutdownServer()
quit()
EOF
Run Code Online (Sandbox Code Playgroud)

这是输出,我猜这是你的预期.

MongoDB shell version: 2.4.14
connecting to: test
switched to db admin
Wed Jun 24 17:07:23.808 DBClientCursor::init call() failed
server should be down...
Wed Jun 24 17:07:23.810 trying reconnect to 127.0.0.1:27017
Wed Jun 24 17:07:23.810 reconnect 127.0.0.1:27017 ok
Wed Jun 24 17:07:23.812 Socket recv() errno:104 Connection reset by peer 127.0.0.1:27017
Wed Jun 24 17:07:23.812 SocketException: remote: 127.0.0.1:27017 error: 9001 socket exception [RECV_ERROR] server [127.0.0.1:27017] 
Wed Jun 24 17:07:23.812 DBClientCursor::init call() failed
Run Code Online (Sandbox Code Playgroud)