在 ReactiveMongo 中获取集合的惯用方式

Idiomatic way of getting a collection in ReactiveMongo

我正在使用 Play 2.5.4 和 ReactiveMongo 编写 Play/Scala 应用程序。基于 this example,我正在使用

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

但是,db 现在已弃用。弃用警告建议我使用 database,但这个 return 是 Future,因此必须映射所有操作。由于 ReactiveMongo 的操作也是 return Futures,这似乎是多余的......获取集合的正确方法是什么? (或者,我是不是完全错过了什么,Future[Future[Future[A]]] 就是未来?)

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

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

假设池启动后至少有一个连接处于活动状态,但情况并非总是如此,因为 checking/discovering 根据网络 speed/latency,ReplicaSet 节点可能需要时间。

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

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