我正在尝试使用 Java 驱动程序MongoDB version 3.6连接到 Atlas 集群。
我写了这段代码:
MongoClientURI uri = new MongoClientURI("mongodb+srv://admin1:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);
我收到有关修复的错误mongodb+srv:
java.lang.IllegalArgumentException: The connection string is invalid. Connection strings must start with 'mongodb://'
at com.mongodb.ConnectionString.<init>(ConnectionString.java:203)
at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:176)
at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:158)
at project.Bot.check(Bot.java:30)
at project.Bot.onUpdateReceived(Bot.java:104)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at org.telegram.telegrambots.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:309)
虽然 POM 文件中列出了驱动程序版本:
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.6.0</version>
</dependency>
然后我这样写,使用 MongoDB 3.6 版(同时删除+srv前缀):
MongoClientURI uri = new MongoClientURI("mongodb://admin1:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);
com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=cluster0.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: cluster0.mongodb.net}, caused by {java.net.UnknownHostException: cluster0.mongodb.net}}]
at com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:369)
at com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:101)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:75)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:71)
at com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:201)
at com.mongodb.operation.CountOperation.execute(CountOperation.java:206)
at com.mongodb.operation.CountOperation.execute(CountOperation.java:53)
at com.mongodb.Mongo.execute(Mongo.java:772)
at com.mongodb.Mongo$2.execute(Mongo.java:759)
at com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:185)
at com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:170)
at project.Bot.check(Bot.java:36)
at project.Bot.onUpdateReceived(Bot.java:103)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at org.telegram.telegrambots.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:309)
当我开始这个过程时,mongo我的数据库被添加到 address mongodb://127.0.0.1:27017,虽然我想将数据库添加到集群本身。我在文档中读到您需要运行该命令mongos,但我无法完全理解如何正确编写它。
集群当然有一个带密码的管理员用户。我可以通过 Compass 客户端和 shell shell 连接到集群本身,但没有添加基础本身(我在程序中添加的)。mongod推出。从描述来看,这里也出现了类似的问题。
请告诉我在编写代码时需要修复什么。(如有需要,我可以提供程序的完整代码。)

客户网址:
作为一个选项:
替换您的用户名、密码、数据库名称。一般来说,他们有一个按钮来获取连接字符串 Connect->YouApp->Driver 3.6:
我将更详细地描述操作和解决方案
我尝试使用 连接到集群
driver3.6 or later,在这种情况下出现了两个不同的错误:第一:当我开处方时
mongodb+srv://user:<PASSWORD>@cluster0-ox90k.mongodb.net/test?retryWrites=true,我收到了Connection strings must start with 'mongodb://'。第二:然后我以相同的方式删除
+srv和规定,但是以这种方式:mongodb://user:<PASSWORD>@cluster0-ox90k.mongodb.net/test?retryWrites=true在这种情况下,我得到了一个错误com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=cluster0-ox90k.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: cluster0-ox90k.mongodb.net}, caused by {java.net.UnknownHostException: cluster0-ox90k.mongodb.net}}]。解决方案: 我终于可以使用连接了
driver3.4 or earlier,这样写:mongodb://user:<PASSWORD>@cluster0-shard-00-00-ox90k.mongodb.net:27017,cluster0-shard-00-01-ox90k.mongodb.net:27017,cluster0-shard-00-02-ox90k.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true.更新:如果您仍想使用
3.6+版本驱动程序,则不要以格式连接(+避免我在问题中指出的类似错误)像这样写:
请注意,密码不能在表格的括号中
<>。另外:如果你突然遇到错误,更新驱动后
java.lang.NoClassDefFoundError: com/mongodb/client/MongoClients,尝试更改启动配置Edit Configurations。