使用mongosh自动创建用户和数据库

问题描述 投票:0回答:1

我目前正在使用armtemplate来创建安装了MongoDB的Linux VM。我之前一直在 MongoDb 4.4 版本中使用 mongo 脚本。但我们现在要开始安装 6.0。在此版本中,Mongo 不再是安装的一部分,我们被迫使用 Mongosh。 之前我们使用的脚本如下:

mongoScript="db = db.getSiblingDB('$userDatabase');db.dropUser('$userName');db.createUser({ user: '$userName', pwd: '$userPassword', roles: [ { role: 'readWrite', db: '$userDatabase' } ] });"

mongo --username $adminUsername --password $adminPassword --eval "$mongoScript" admin

但现在我尝试使用 Mongosh 来编写

mongoScript="db = db.getSiblingDB('$userDatabase');db.dropUser('$userName');db.createUser({ user: '$userName', pwd: '$userPassword', roles: [ { role: 'readWrite', db: '$userDatabase' } ] });"

mongosh --username $adminUsername --password $adminPassword --eval "$mongoScript" admin

我将问题范围缩小到

db.dropUser('$userName')

由于数据库中不存在该用户,因此会抛出错误“MongoshInvalidInputError:[COMMON-10001]无效的数据库名称:”

因此,如果我从脚本中删除该部分,它将正常工作。但在某些情况下,我想多次运行该脚本。但如果我没有 db.dropuser 部分。然后它会抛出错误,通知用户已经存在。有没有人有解决办法?

希望在 Mongosh 脚本的帮助下创建 Mongo 数据库,就像我使用 Mongo 脚本一样。

linux mongodb azure-resource-manager mongo-shell
1个回答
0
投票

为什么要删除用户?在创建用户之前检查该用户是否存在。运行这样的东西:

if (db.getUser('$userName') != null) db.createUser({ user: '$userName', pwd: '$userPassword', roles: [ { role: 'readWrite', db: '$userDatabase' } ] });

我没有测试过,也许你必须使用

db.getUsers({ filter: { user: '$userName' } })

db.runCommand({ usersInfo:  { user: '$userName', db: '$userDatabase' } })

db.getUser('$userName').ok != 1
© www.soinside.com 2019 - 2024. All rights reserved.