MongoDB写入操作上的ConnectionNotInitialized异常
我有两个Docker容器:MongoDB写入操作上的ConnectionNotInitialized异常,mongodb,scala,reactivemongo,database,Mongodb,Scala,Reactivemongo,Database,我有两个Docker容器: 运行MongoDB 使用ReactiveMongo连接到所述MongoDB的服务 我用于连接MongoDB的代码: trait MongoHelper { this: BaseConfig => val dbKey: String val collKey: String lazy val mongoConfig = persistenceConfig.getConfig( dbKey ) lazy val servers = persist
trait MongoHelper {
this: BaseConfig =>
val dbKey: String
val collKey: String
lazy val mongoConfig = persistenceConfig.getConfig( dbKey )
lazy val servers = persistenceConfig.getStringList( s"$dbKey.servers" ).asScala
lazy val database = persistenceConfig.getString( s"$dbKey.database" )
lazy val username = persistenceConfig.getString( s"$dbKey.username" )
lazy val password = persistenceConfig.getString( s"$dbKey.password" )
lazy val credentials = Seq( Authenticate( database, username, password ) )
lazy val conOpts = MongoConnectionOptions( authSource = Some( database ), authMode = ScramSha1Authentication )
lazy val driver = new MongoDriver
lazy val connection = driver.connection( servers, authentications = credentials, options = conOpts )
lazy val db = connection( database )
}
连接似乎很好,因为我可以毫无问题地从中读取。但是,当我尝试插入或更新文档时,我遇到了以下异常:
reactivemongo.core.errors.ConnectionNotInitialized: MongoError['Connection is missing metadata (like protocol version, etc.) The connection pool is probably being initialized.']
at reactivemongo.core.errors.ConnectionNotInitialized$.MissingMetadata(errors.scala:71)
at reactivemongo.api.collections.GenericCollection$$anonfun$insert$1.apply(genericcollection.scala:338)
at reactivemongo.api.collections.GenericCollection$$anonfun$insert$1.apply(genericcollection.scala:314)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.pollAndExecAll(ForkJoinPool.java:1253)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1346)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
但这对我来说毫无意义,连接池必须初始化,因为我正在使用它从数据库中读取数据。上次我这样做时,我与一个具有错误凭据的用户IIRC一起登录数据库。使用
connection.database(…)
而不是connection(…)
(或其别名connection.DB(…)
,要有正确的DB分辨率。您应该有一个弃用警告。@Jean Philippellet非常感谢,这就成功了!我的Docker脚本应该创建用户,但显然他们没有被创建。。尽管我试图验证的用户不存在,但我仍然可以阅读,这很奇怪。错误消息不仅仅是误导性的。您应该有一个编译警告,指示.db
已被弃用(由于其同步问题)。