我试图从运行bash脚本命令:如何从bash执行mongo命令?
mongo 192.168.10.20:27000 --eval "use admin && db.shutdownServer() && quit()"
,但我得到这个错误:
[rs.initiate() && use admin && db.shutdownServer() && quit()] doesn't exist
我怎么能做到这一点不使用js文件?
我试图从运行bash脚本命令:如何从bash执行mongo命令?
mongo 192.168.10.20:27000 --eval "use admin && db.shutdownServer() && quit()"
,但我得到这个错误:
[rs.initiate() && use admin && db.shutdownServer() && quit()] doesn't exist
我怎么能做到这一点不使用js文件?
还有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函数。另一种编写上述关机命令的方法是:
mongo 192.168.10.20:27000 --eval "db=db.getSiblingDB('admin');db.shutdownServer()"
您可以使用heredoc语法。
#! /bin/sh
mongo <<EOF
use admin
db.shutdownServer()
quit()
exit
原来定界符抛出一个警告,当EOF在年底bash脚本失踪。这是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
--eval option
Use the --eval option to mongo to pass the shell a JavaScript fragment, as in the following:
mongo test --eval "printjson(db.getCollectionNames())"
你也可以把你的JS片段引入到.js
文件然后执行:
mongo < myScript.js
您也可以在此SO question
找到更多有用的东西
,但你可以把更多的一个命令在EVAL? – MoienGK
@MoienGK是的,你可以在'--eval'中加入更长的JavaScript。按照我的第二个示例,用分号分隔多个语句。 – Stennie
意外的错误:“shutdownServer失败:关机必须从本地主机运行db时没有身份验证” – MoienGK