我正在尝试从bash脚本运行此命令:
mongo 192.168.10.20:27000 --eval "use admin && db.shutdownServer() && quit()"
但是我收到了这个错误:
[rs.initiate() && use admin && db.shutdownServer() && quit()] doesn't exist
如何在不使用js文件的情况下执行此操作?
答案 0 :(得分:17)
有differences between interactive & scripted mongo
shell sessions。特别是,像use admin
这样的命令不是有效的JavaScript,只能在交互式shell会话中使用。
关机命令行的工作等效值为:
mongo 192.168.10.20:27000/admin --eval "db.shutdownServer()"
您可以包含要在连接字符串中使用的数据库,并且无需从脚本化的mongo
shell会话中退出。
如果确实需要从脚本化会话中更改数据库,则可以使用db.getSiblingDB()
JavaScript函数。上面写入shutdown命令的另一种方法是:
mongo 192.168.10.20:27000 --eval "db=db.getSiblingDB('admin');db.shutdownServer()"
答案 1 :(得分:9)
您可以使用heredoc语法。
#! /bin/sh
mongo <<EOF
use admin
db.shutdownServer()
quit()
exit
当bash脚本末尾缺少EOF时,heredoc语法会抛出警告。这是bash脚本版本。
#! /bin/bash
mongo <<EOF
use admin
db.shutdownServer()
quit()
EOF
这是输出,我猜这是你的预期。
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
答案 2 :(得分:4)
来自mongo docs:
- eval选项
使用 - eval 选项mongo将shell传递给JavaScript片段,如下所示:
mongo test --eval "printjson(db.getCollectionNames())"
您也可以将JS片段放入.js
文件,然后执行:
mongo < myScript.js
您还可以在此SO question
中找到更多有用的内容