我目前正在使用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 脚本一样。
为什么要删除用户?在创建用户之前检查该用户是否存在。运行这样的东西:
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