尝试将数据插入 Atlast 服务器上的集合时,命令失败并出现错误 8000 (AtlasError)
Posted
技术标签:
【中文标题】尝试将数据插入 Atlast 服务器上的集合时,命令失败并出现错误 8000 (AtlasError)【英文标题】:Command failed with error 8000 (AtlasError) when try to insert data into collection on Atlast server 【发布时间】:2019-09-04 02:32:28 【问题描述】:我正在使用 mongoDB Atlas 创建一个 mongodb。一切似乎都很好。当我运行程序时,服务器连接成功。但是,当我尝试将数据插入集合时,它给了我错误“命令失败,错误 8000 (AtlasError)”。我在另一篇文章中读到,说我必须使用不同的数据库名称,但这仍然不起作用。我对此很陌生,所以任何帮助都将不胜感激。这是我的代码
public class DbController2<DBObject>
MongoClientURI uri;
MongoClient mongoClient;
MongoDatabase database;
MongoCollection<Document> collection;
public DbController2()
uri = new MongoClientURI(
"mongodb://dbEfish:PASSWORD@cluster0-shard-00-00-klemt.mongodb.net:27017,cluster0-shard-00-01-klemt.mongodb.net:27017,cluster0-shard-00-02-klemt.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true");
mongoClient = new MongoClient(uri);
database = mongoClient.getDatabase("eFishDB");
collection = database.getCollection("controlVar");
public Document toDBObject(String key, String[] dataPoints)
return new Document("_id", key)
.append("Water Level", dataPoints[0])
.append("Water Temperature", dataPoints[1])
.append("pH Level", dataPoints[2])
.append("Nitrate Level", dataPoints[3])
.append("Oxygen Level", dataPoints[4])
.append("Ammonia Level", dataPoints[5])
.append("Light Intensity", dataPoints[6])
.append("Air Temperature", dataPoints[7]);
public void insert(String key, String[] dataPoints)
//((DBCollection) collection).insert((com.mongodb.DBObject[]) this.toDBObject(key, dataPoints));
collection.insertOne(this.toDBObject(key, dataPoints));
这是错误日志: 信息:关闭连接 [connectionIdlocalValue:4] 到 cluster0-shard-00-00-klemt.mongodb.net:27017,因为此连接引发了套接字异常。 线程“AWT-EventQueue-0”com.mongodb.MongoSecurityException 中的异常:验证 MongoCredentialmechanism=SCRAM-SHA-1,userName='dbEfish',source='admin',password=,mechanismProperties= 的异常 在 com.mongodb.internal.connection.SaslAuthenticator.wrapException(SaslAuthenticator.java:173) 在 com.mongodb.internal.connection.SaslAuthenticator.access$300(SaslAuthenticator.java:40) 在 com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:70) 在 com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:47) 在 com.mongodb.internal.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:179) 在 com.mongodb.internal.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:47) 在 com.mongodb.internal.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:152) 在 com.mongodb.internal.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:63) 在 com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:129) 在 com.mongodb.internal.connection.UsageTrackingInternalConnection.open(UsageTrackingInternalConnection.java:50) 在 com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.open(DefaultConnectionPool.java:398) 在 com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:115) 在 com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:101) 在 com.mongodb.internal.connection.DefaultServer.getConnection(DefaultServer.java:85) 在 com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.getConnection(ClusterBinding.java:124) 在 com.mongodb.client.internal.ClientSessionBinding$SessionBindingConnectionSource.getConnection(ClientSessionBinding.java:136) 在 com.mongodb.operation.OperationHelper.withReleasableConnection(OperationHelper.java:424) 在 com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:194) 在 com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:69) 在 com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:198) 在 com.mongodb.client.internal.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:961) 在 com.mongodb.client.internal.MongoCollectionImpl.executeInsertOne(MongoCollectionImpl.java:495) 在 com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:479) 在 com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:473) 在 DbController2.insert(DbController2.java:37) 在 EFishGreen$4.actionPerformed(EFishGreen.java:131) 在 javax.swing.AbstractButton.fireActionPerformed(未知来源) 在 javax.swing.AbstractButton$Handler.actionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.fireActionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.setPressed(未知来源) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源) 在 java.awt.Component.processMouseEvent(未知来源) 在 javax.swing.JComponent.processMouseEvent(未知来源) 在 java.awt.Component.processEvent(未知来源) 在 java.awt.Container.processEvent(未知来源) 在 java.awt.Component.dispatchEventImpl(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.LightweightDispatcher.retargetMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.processMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.dispatchEvent(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Window.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.EventQueue.dispatchEventImpl(未知来源) 在 java.awt.EventQueue.access$500(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(未知来源) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源) 引起:com.mongodb.MongoCommandException:命令失败,错误 8000(AtlasError):'bad auth Authentication failed。'在服务器 cluster0-shard-00-00-klemt.mongodb.net:27017 上。完整的响应是 "ok": 0, "errmsg": "bad auth Authentication failed.", "code": 8000, "codeName": "AtlasError" 在 com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:187) 在 com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:303) 在 com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:259) 在 com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:83) 在 com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:33) 在 com.mongodb.internal.connection.SaslAuthenticator.sendSaslContinue(SaslAuthenticator.java:134) 在 com.mongodb.internal.connection.SaslAuthenticator.access$200(SaslAuthenticator.java:40) 在 com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:67) ... 59 更多
【问题讨论】:
你在这个问题中包含了你的数据库密码——你可能想要更新它 非常感谢。我非常疲倦和沮丧,我完全忘记了它。 这是一个身份验证错误,它基本上意味着您的用户名和密码不正确,或者至少在authSource
中找不到。另请注意,authSource
是 可选 并且在空间实际上是 admin
(应该是)并且在 URI 上不包含数据库命名空间的情况下不应该是必需的。因此,请从 URI 中删除 test
,然后检查您的凭据。此外,在现代驱动程序版本中,没有必要不使用 URI 的 mongodb+srv
形式。如果您的驱动程序较旧,那么我强烈建议您升级并使用现代 URI 形式。
请编辑您的问题以包含您正在使用的特定驱动程序和版本。如您提供的错误日志中所述,存在身份验证错误,表明您提供的驱动程序或凭据存在问题。注意:我希望您已经configured an appropriate whitelist 限制与您的 Atlas 部署的连接。即便如此,我还是建议您更改您的密码,因为它仍然显示在此问题的编辑历史记录中。
【参考方案1】:
如果 MOngoDb atlas 云凭据和云详细信息 [IP/URL] 正确,则这是您选择用于连接应用程序的驱动程序的问题。 我遇到了同样的问题,根本原因是应用程序和mongodb连接字符串中的驱动程序版本不匹配。
mongodb://testatlasCloud:sedXhdsghgK24RGJxF@firstvm-shard-00-00-n6ojx.mongodb.net:27017,firstvm-shard-00-01-n6ojx.mongodb.net:27017, firstvm-shard-00-02-n6ojx.mongodb.net:27017/firstvmDB?ssl=true&replicaSet=firstvm-shard-0&authSource=admin&retryWrites=true&w=majority");
mongodb+srv:// 不适合我,因为我使用的是旧的 mongo 驱动程序版本。
【讨论】:
以上是关于尝试将数据插入 Atlast 服务器上的集合时,命令失败并出现错误 8000 (AtlasError)的主要内容,如果未能解决你的问题,请参考以下文章
Clickhouse 中的 Mongo Atlast URI 支持