查询失败的错误代码13带有名称'未经授权'在MongoDB中查找查询

发布于 2025-02-13 11:04:58 字数 2495 浏览 0 评论 0原文

我在Java J2EE应用程序中研究MongoDB驱动程序。以前,我们使用此依赖项:

<dependency>
    <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.4.2</version>
    </dependency>
<dependency>
    <groupId>org.mongodb.morphia</groupId>
    <artifactId>morphia</artifactId>
    <version>1.3.2</version>
</dependency>

现在我们使用

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.6.1</version>
</dependency>

了一个admin数据库,其中一个包含文档的集合。 这样的先前的连接方法是这样实现的:

MongoClient mongoClient = new MongoClient(serverList, Arrays.asList(MongoCredential.createCredential(username, "admin", password.toCharArray())), builder.build());
Morphia morphia = new Morphia();
morphia.getMapper().getOptions().setMapSubPackages(true);
morphia.mapPackage(entitiesPackage);
Datastore datastore = morphia.createDatastore(mongoClient, "mycollection");

现在我们有:

CodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();
CodecRegistry pojoCodecRegistry = CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), CodecRegistries.fromProviders(pojoCodecProvider));
MongoClient client = MongoClients.create(uri);
MongoCollection collection = client.getDatabase("admin").withCodecRegistry(pojoCodecRegistry).getCollection("mycollection");

使用此连接字符串:

mongodb://<username>:<password>@<mongodb_server_address>:27017

此连接是可以的此语法:

collection.find(MyEntity.class).first(); 

我们有一个错误:

Caused by: java.lang.RuntimeException: com.mongodb.MongoQueryException: Query failed with error code 13 with name 'Unauthorized' and error message 'not authorized on admin to execute command { find: "mycollection", filter: {}, limit: 1, singleBatch: true }' on server mongodb_server_address:27017
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:257)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:105)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:87)
    ... 8 more

它不是凭据

I working on mongodb driver migration in my Java J2EE application. Previously we use this dependencies :

<dependency>
    <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.4.2</version>
    </dependency>
<dependency>
    <groupId>org.mongodb.morphia</groupId>
    <artifactId>morphia</artifactId>
    <version>1.3.2</version>
</dependency>

Now we use this one

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.6.1</version>
</dependency>

We have an admin database with one collection that containing documents.
The previous connection method was implemented like this :

MongoClient mongoClient = new MongoClient(serverList, Arrays.asList(MongoCredential.createCredential(username, "admin", password.toCharArray())), builder.build());
Morphia morphia = new Morphia();
morphia.getMapper().getOptions().setMapSubPackages(true);
morphia.mapPackage(entitiesPackage);
Datastore datastore = morphia.createDatastore(mongoClient, "mycollection");

And now we have :

CodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();
CodecRegistry pojoCodecRegistry = CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), CodecRegistries.fromProviders(pojoCodecProvider));
MongoClient client = MongoClients.create(uri);
MongoCollection collection = client.getDatabase("admin").withCodecRegistry(pojoCodecRegistry).getCollection("mycollection");

with this connection string :

mongodb://<username>:<password>@<mongodb_server_address>:27017

This connection is OK because in starting of my wildfly I can see the log who say Mongodb connected but when the application try to get data from mongodb database using this syntax :

collection.find(MyEntity.class).first(); 

we have this error :

Caused by: java.lang.RuntimeException: com.mongodb.MongoQueryException: Query failed with error code 13 with name 'Unauthorized' and error message 'not authorized on admin to execute command { find: "mycollection", filter: {}, limit: 1, singleBatch: true }' on server mongodb_server_address:27017
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:257)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:105)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:87)
    ... 8 more

It's not credential because with older version everythings work fine and

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

几度春秋 2025-02-20 11:04:58

我这样解决了我的问题:

连接字符串:

mongodb://<username>:<password>@<my_server_address>:27017/<dbname>?authSource=admin

CodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();
CodecRegistry pojoCodecRegistry = CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), CodecRegistries.fromProviders(pojoCodecProvider));
MongoClient client = MongoClients.create(uri);
MongoDatabse database = client.getDatabase(dbName).withCodecRegistry(pojoCodecRegistry);

I fix my probleme like this :

connection string :

mongodb://<username>:<password>@<my_server_address>:27017/<dbname>?authSource=admin

CodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();
CodecRegistry pojoCodecRegistry = CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), CodecRegistries.fromProviders(pojoCodecProvider));
MongoClient client = MongoClients.create(uri);
MongoDatabse database = client.getDatabase(dbName).withCodecRegistry(pojoCodecRegistry);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文