微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB原始Java连接

如何解决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包含凭据列表。有四个实现。

  1. 默认
  2. 母语
  3. x509
  4. sasl

“ myDb”,一次进入凭据-为什么

此处指定的主要原因是必须在哪个数据库上执行authenticate命令,因为每个数据库可以具有不同的用户名。

executeCommand(getCredential().getSource(),authCommand,connection);

一次执行一次getDatabase-为什么

完全不同。它返回MongoDatabase对象,其中包含read,write concerns,list of collections,create view,create collection的选项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?