1

我正在使用 Play 2.5.4 和 ReactiveMongo 编写一个 Play/Scala 应用程序。基于这个例子,我正在使用

class SettingStore( val mongo:ReactiveMongoApi) {
  def collection = mongo.db.collection[BSONCollection]("Settings")
  // more code...
}

但是,db现在已弃用。弃用警告建议我使用database,但是这个返回 aFuture所以所有操作都必须被映射。由于 ReactiveMongo 的操作也返回Futures,这似乎是多余的......获取集合的正确方法是什么?(或者,我是否完全错过了一些东西,Future[Future[Future[A]]]是未来吗?)

4

1 回答 1

1

如果您查看文档,您可以看到使用该函数的示例.database,而不是弃用的.db.

非异步.db已被弃用,因为它没有提供足够的保证来找到MongoConnection池中的活动连接。

它假设池启动后至少有一个连接处于活动状态,但情况并非总是如此,因为根据网络速度/延迟检查/发现 ReplicaSet 节点可能需要时间。

如果驱动程序在一段时间内无法加入节点(网络中断,节点重新启动,......),相同的断言可能是错误的。这可能需要一些时间,以便节点指示它们重新上线。

新的.database解决方案是异步的,并使用 aFailoverStrategy等待(或不等待)可用连接(根据选择的读取首选项,...)。

于 2016-06-16T08:12:28.517 回答