在 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 Future
s,这似乎是多余的......获取集合的正确方法是什么? (或者,我是不是完全错过了什么,Future[Future[Future[A]]]
就是未来?)
如果您查看 documentation,您可以看到使用 .database
函数的示例,而不是已弃用的 .db
.
非异步 .db
已被弃用,因为它没有提供足够的保证,无法在 MongoConnection
池中找到活动连接。
假设池启动后至少有一个连接处于活动状态,但情况并非总是如此,因为 checking/discovering 根据网络 speed/latency,ReplicaSet 节点可能需要时间。
如果驱动程序在一段时间内无法加入节点(网络中断、节点重启等),则相同的断言可能是错误的。这可能需要一些时间,以便节点指示它们已恢复在线。
新的 .database
解决方案是异步的,并使用 FailoverStrategy
等待(或不等待)可用连接(根据选择的读取首选项,...)。
我正在使用 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 Future
s,这似乎是多余的......获取集合的正确方法是什么? (或者,我是不是完全错过了什么,Future[Future[Future[A]]]
就是未来?)
如果您查看 documentation,您可以看到使用 .database
函数的示例,而不是已弃用的 .db
.
非异步 .db
已被弃用,因为它没有提供足够的保证,无法在 MongoConnection
池中找到活动连接。
假设池启动后至少有一个连接处于活动状态,但情况并非总是如此,因为 checking/discovering 根据网络 speed/latency,ReplicaSet 节点可能需要时间。
如果驱动程序在一段时间内无法加入节点(网络中断、节点重启等),则相同的断言可能是错误的。这可能需要一些时间,以便节点指示它们已恢复在线。
新的 .database
解决方案是异步的,并使用 FailoverStrategy
等待(或不等待)可用连接(根据选择的读取首选项,...)。