RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 844156
Accepted
invzbl3
invzbl3
Asked:2020-06-20 06:25:36 +0000 UTC2020-06-20 06:25:36 +0000 UTC 2020-06-20 06:25:36 +0000 UTC

如何连接到 Atlas M0(免费层)MongoDB 集群?

  • 772

我正在尝试使用 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);

结果,IDE 报告如下错误: 在此处输入图像描述

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推出。从描述来看,这里也出现了类似的问题。

请告诉我在编写代码时需要修复什么。(如有需要,我可以提供程序的完整代码。)

java
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Денищук Павло Миколайович
    2020-06-26T16:05:34Z2020-06-26T16:05:34Z

    客户网址:

    mongodb+srv://username:password@cluster0-00lyc.mongodb.net/databasename?retryWrites=true
    

    作为一个选项:

    mongodb://username:password@cluster0-shard-00-00-00lyc.mongodb.net:27017,cluster0-shard-00-01-00lyc.mongodb.net:27017,cluster0-shard-00-02-00lyc.mongodb.net:27017/databasename?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin
    

    替换您的用户名、密码、数据库名称。一般来说,他们有一个按钮来获取连接字符串 Connect->YouApp->Driver 3.6: 在此处输入图像描述

    • 1
  2. Best Answer
    invzbl3
    2020-06-26T20:02:47Z2020-06-26T20:02:47Z

    我将更详细地描述操作和解决方案

    我尝试使用 连接到集群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+版本驱动程序,则不要以格式连接(+避免我在问题中指出的类似错误)

    MongoClientURI uri = new MongoClientURI("mongodb+srv://admin1:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
    MongoClient mongoClient = new MongoClient(uri);
    

    像这样写:

    MongoClient mongoClient = MongoClients.create("mongodb+srv://admin1:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
    

    请注意,密码不能在表格的括号中<>。

    另外:如果你突然遇到错误,更新驱动后java.lang.NoClassDefFoundError: com/mongodb/client/MongoClients,尝试更改启动配置Edit Configurations。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5