reactiveMogo对于许多这样的内部案例类等太聪明了,每次我不得不使用它时,都会遇到这样的奇怪问题。您可以通过提供固定存在范围的类型注释来强制编译它:
scala> type FAMResult =
| c.BatchCommands.FindAndModifyCommand.FindAndModifyResult forSome {
| val c: BSONCollection
| }
defined type alias FAMResult
scala> def remove =
| testColl.flatMap[FAMResult](_.findAndRemove(BSONDocument("atomicNumber" -> 26)))
remove: scala.concurrent.Future[FAMResult]
但是,除非您不关心删除命令的结果,否则这可能不理想。更好的方法是映射到
Future[<blah blah blah>.FindAndModifyResult]
里面
这个
flatMap
这样你最终会得到一个更有用的类型:
scala> def remove = testColl.flatMap(
| _.findAndRemove(BSONDocument("atomicNumber" -> 26)).map(_.value)
| )
remove: scala.concurrent.Future[Option[reactivemongo.bson.BSONDocument]]
你也可以
.map(_ => ())
如果你真的不在乎结果,
.map(_.result[Element])
如果你想解码结果,等等。