MongoDB命令行显示用户是否存在(用于puppet 'unless'子句)



我们正在使用MongoDB基于用户的身份验证,我想快速运行一个命令来检查用户是否已在数据库中创建,以便puppet不会重复尝试创建用户。

以下是我们如何检查副本集是否已初始化:

/usr/bin/mongo --host ${members[0]} --quiet --eval 'rs.status().ok' | grep -q 1

身份验证是否可以使用类似的技巧?我已经检查了这里的文档 http://www.mongodb.org/display/DOCS/dbshell+%28mongo%29+Reference,但

看不到一种方法?

是的,在给定的数据库上,您可以使用db.system.users.find({user:'login'}).count()如果用户不存在,它将返回 0。

感觉这种方法已被弃用,我需要以下命令才能工作:

db.getUsers({filter: {'user': 'login'}})

今天我只是尝试了mongo命令的-u-p选项,它对我有用:

mongo --port 27037 --quiet -u superuser -p pwd 
    --eval "db.system.users.find({user:'user3'}).count()" admin

请注意最后一个"admin"参数 - 它是您要进行身份验证的数据库的名称。

要检查用户username是否存在,请执行以下操作:

db.runCommand({ usersInfo: { user: "username", db: "admin" } }).users.length == 1

如果用户存在,这将返回true,否则false返回。 (如果用户是在另一个数据库中创建的,请将admin替换为数据库的名称。

您也可以

使用findOne

db.system.users.findOne({user:'login'})

  • 如果没有用户,它将null
  • 如果找到,它将返回用户

最新更新