使Enumerator / Iteratee适应流

时间:2013-05-01 21:16:12

标签: scala playframework-2.0 spray

我有一个Spray应用程序,我正在使用reactive-mongo连接到我的Mongo数据库。

val collection: BSONCollection = db("ping")
val cursor: Cursor[Ping] = collection.find(BSONDocument()).cursor[Ping]
val e: Enumerator[Ping] = cursor.enumerate()

ReactiveMongo的光标允许我按块获取数据。此游标可以转换为play.api.libs.iteratee.Enumerator,后者又连接到play.api.libs.iteratee.Iteratee,其中为集合的每个元素调用我想要的任何代码。 “Ping”是我的域名实体。

使用Spray,可以返回将被编组为JSON响应的Stream [Ping]。我想知道是否可以将Enumerator或Iteratee改编为Stream,所以我可以返回。

1 个答案:

答案 0 :(得分:1)

您可以在Cursor个实例上使用collect[Stream]代替enumerate来执行此操作:

val collection: BSONCollection = db("ping")
val cursor: Cursor[Ping] = collection.find(BSONDocument()).cursor[Ping]
val stream: Stream[Ping] = cursor.toList.toStream

编辑:使用cursor.toList.toStream。这将收集查询匹配的所有文档,然后生成流。