在ReactiveMongo中获取集合的惯用法

时间:2016-06-13 08:25:37

标签: scala reactivemongo play-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,但这个返回Future,因此必须映射所有操作。由于ReactiveMongo的操作也返回Future,这似乎是多余的......获取集合的正确方法是什么? (或者,我是否完全错过了某些内容,Future[Future[Future[A]]]是未来?)

1 个答案:

答案 0 :(得分:0)

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

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

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

如果驱动程序无法加入节点一段时间(网络中断,节点重新启动,......),则相同的断言可能是错误的。可能需要一些时间,因此节点表明它们已重新上线。

新的.database分辨率是异步的,并使用FailoverStrategy等待(或不等待)可用连接(根据所选的读取偏好,...)。