我对MongoDB非常陌生。我正在尝试通过Java驱动程序为MongoDB中的数据库创建一个用户。我使用的是mongo-java-driver 3.0.1版本。我在谷歌上搜索了一下,没有找到相关的答案。我看到在mongo-java-Driver2.13.0中有直接方法,但在最新版本中被弃用了。我尝试使用下面的代码来创建用户,但是我得到了异常。
代码:
MongoClient mongoClient = new MongoClient("127.0.0.1","27017");
MongoDatabase mongoDatabase = this.mongoClient
.getDatabase(doc);
BasicDBObject commandArguments = new BasicDBObject();
commandArguments.put("user", mongoDatabase.getName());
commandArguments.put("pwd", "Cip#erCloud@123");
String[] roles = { "readWrite" };
commandArguments.put("roles", roles);
BasicDBObject command = new BasicDBObject("createUser",
commandArguments.toString());
mongoDatabase.runCommand(command);
异常:
com.mongodb.MongoCommandException: Command failed with error 2: 'Must provide a 'pwd' field for all user documents, except those with '$external' as the user's source db' on server 127.0.0.1:27017.
The full response is { "ok" : 0.0, "errmsg" : "Must provide a 'pwd' field for all user documents, except those with '$external' as the user's source db", "code" : 2 }
以下是我的问题:
注意:我使用的是Java库。
有人能帮帮我吗。我被困在这里了。
谢谢和问候,阿马尔
发布于 2015-05-29 14:36:57
在创建用户时,您可以尝试这样做吗:
MongoClient mongo = new MongoClient("localhost", 27017);
MongoDatabase db = mongo.getDatabase("testDB");
Map<String, Object> commandArguments = new HashMap<>();
commandArguments.put("createUser", "dev");
commandArguments.put("pwd", "password123");
String[] roles = { "readWrite" };
commandArguments.put("roles", roles);
BasicDBObject command = new BasicDBObject(commandArguments);
db.runCommand(command);
发布于 2017-02-12 20:15:55
这两种方法对我都不起作用。然而,这种方式是有效的:
final MongoDatabase db = mongoClient.getDatabase("myDatabase");
final BasicDBObject createUserCommand = new BasicDBObject("createUser", "myuser").append("pwd", "mypassword").append("roles",
Collections.singletonList(new BasicDBObject("role", "dbOwner").append("db", "myDatabase")));
db.runCommand(createUserCommand);
发布于 2018-08-12 04:37:10
我需要在测试用例中创建一个用户。如果用户已经存在,则运行createUser命令将抛出异常。在尝试创建用户之前,我添加了一些代码来删除该用户,以便异常不会出现在单元测试日志中。对我来说,添加此代码比捕获异常、验证它是否用于现有用户帐户并忽略它要容易得多。
要使用它,您需要设置用户名、密码和TEST_DATABASE_NAME。
Document result = null;
MongoDatabase db = mongo.getDatabase(TEST_DATABASE_NAME);
BasicDBObject getUsersInfoCommand = new BasicDBObject("usersInfo",
new BasicDBObject("user", username).append("db", TEST_DATABASE_NAME));
BasicDBObject dropUserCommand = new BasicDBObject("dropUser", username);
BasicDBObject createUserCommand = new BasicDBObject("createUser", username).append("pwd", password).append("roles",
Collections.singletonList(new BasicDBObject("role", "dbOwner").append("db", TEST_DATABASE_NAME)));
// If test user exists from a previous run, drop it
result = db.runCommand(getUsersInfoCommand);
ArrayList users = (ArrayList) result.get("users");
if (!users.isEmpty()) {
db.runCommand(dropUserCommand);
}
db.runCommand(createUserCommand);
更好的做法是在测试完成后删除用户,但我在@AfterClass方法中有代码,这实际上是此测试的一部分,这将使共享此代码示例变得更加复杂。
https://stackoverflow.com/questions/30505260
复制相似问题