如何解决MongoDB原始Java连接
我正在尝试创建将与其他mongo数据库实例一起使用的通用mongo连接组件。我设法使其与某些代码like一起使用:
// Creating a Mongo client
MongoClient mongo = new MongoClient( "localhost",27017 );
// Creating Credentials
MongoCredential credential;
credential = MongoCredential.createCredential("sampleUser","myDb","password".tochararray());
System.out.println("Connected to the database successfully");
// Accessing the database
MongoDatabase database = mongo.getDatabase("myDb");
System.out.println("Credentials ::"+ credential);
我不明白为什么它需要在两个地方指定数据库:"myDb"
,一次在凭据中,一次在执行getDatabase
时。除设置外,我还需要在createCredential
:“ admin”上指定其他数据库才能正常工作。为什么凭证数据库与我将运行查询的数据库不同?
解决方法
当您深入检查代码时,会发现以下令人信服的原因。
这是所有身份验证者掉下来的地方。
private void authenticateAll(final InternalConnection internalConnection,final ConnectionDescription connectionDescription) {
if (connectionDescription.getServerType() != ServerType.REPLICA_SET_ARBITER) {
for (final Authenticator cur : authenticators) {
cur.authenticate(internalConnection,connectionDescription);
}
}
}
authenticators
包含凭据列表。有四个实现。
- 默认
- 母语
- x509
- sasl
“ myDb”,一次进入凭据-为什么
此处指定的主要原因是必须在哪个数据库上执行authenticate命令,因为每个数据库可以具有不同的用户名。
executeCommand(getCredential().getSource(),authCommand,connection);
一次执行一次getDatabase-为什么
完全不同。它返回MongoDatabase
对象,其中包含read,write concerns,list of collections,create view,create collection
的选项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。