MongoDB 原始 java 连接
MongoDB raw java connection
我正在尝试创建一个通用的 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);
我不明白为什么它需要在 2 个地方指定数据库:"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", once in the credential - why
在这里指定的主要原因是,必须在哪个数据库上执行身份验证命令,因为每个数据库可以有不同的用户名。
executeCommand(getCredential().getSource(), authCommand, connection);
once while it does a getDatabase - why
完全不同。它 returns MongoDatabase
包含选项的对象 read, write concerns, list of collections, create view, create collection
.
我正在尝试创建一个通用的 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);
我不明白为什么它需要在 2 个地方指定数据库:"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", once in the credential - why
在这里指定的主要原因是,必须在哪个数据库上执行身份验证命令,因为每个数据库可以有不同的用户名。
executeCommand(getCredential().getSource(), authCommand, connection);
once while it does a getDatabase - why
完全不同。它 returns MongoDatabase
包含选项的对象 read, write concerns, list of collections, create view, create collection
.