Bash 使用不同数据库的unix shell中的Mongo命令

Bash 使用不同数据库的unix shell中的Mongo命令,bash,mongodb,shell,Bash,Mongodb,Shell,我可以使用以下命令连接到mongo服务器: mongo主机:端口/管理员--用户名=用户--密码=密码 我得到了一个mongo shell,在这里我可以执行任何类型的mongo命令 我切换到dev数据库(使用dev) 我想从unixshell/命令行执行mongo命令 在dev数据库上,但我只能访问admin 我该怎么做?如何指定要使用的db?如果您只想执行一个命令,可以使用以下命令: mongo server:22021/my_dbname --eval "printjson(db.serve

我可以使用以下命令连接到mongo服务器:

mongo主机:端口/管理员--用户名=用户--密码=密码

我得到了一个mongo shell,在这里我可以执行任何类型的mongo命令 我切换到dev数据库(使用dev)

我想从unixshell/命令行执行mongo命令 在dev数据库上,但我只能访问admin


我该怎么做?如何指定要使用的db?

如果您只想执行一个命令,可以使用以下命令:

mongo server:22021/my_dbname --eval "printjson(db.serverStatus())"
如果希望执行多个命令(例如驻留在名为command.js的文件中),可以执行以下操作:

mongo server:22021/my_dbname --quiet commands.js
function testMongoScript {
    mongo server:22021/my_dbname <<EOF
       use mydb
       db.leads.findOne()
       db.leads.find().count()
    EOF
}
如果您想要纯shell脚本(SQL)样式,则可以执行以下操作:

mongo server:22021/my_dbname --quiet commands.js
function testMongoScript {
    mongo server:22021/my_dbname <<EOF
       use mydb
       db.leads.findOne()
       db.leads.find().count()
    EOF
}
函数testMongoScript{

mongo服务器:22021/my_dbname您可以使用输出重定向来运行您需要的任何命令:

mongo localhost:27017 <<< $'rs.slaveOk()\nshow dbs'
只需记住命令之间的
\n

使用
--authenticationDatabase
对用户所在的数据库进行身份验证,即使您正在连接到其他数据库:

mongo localhost:27017/dev -u user -p **** --authenticationDatabase admin

当然,您将无法在用户没有权限的
dev
数据库中执行任何操作。

问题是,如果我使用my_dbname而不是admin,则会出现访问错误,因此我需要使用admin凭据,但切换到my_dbname。嗯,我没有识别您评论的第二部分。mongo主机:port/admin--username=user--password=pass我的用户拥有对开发数据库的权限,只是我总是需要使用“use dev”切换到它。这个--authenticationDatabase将是解决我的问题的一个非常好的选项,但是我这里的mongo 2.0.4版本似乎不支持它。