1

我有一个 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 可以返回一个 Stream[Ping] ,该 Stream[Ping] 将被编组为 JSON 响应。我想知道是否可以将 Enumerator 或 Iteratee 调整为 Stream,所以我可以返回它。

4

1 回答 1

1

您可以使用collect[Stream]而不是Cursorenumerate实例来执行此操作:

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

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

于 2013-05-01T21:30:16.263 回答