我有一个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,所以我可以返回。
答案 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
。这将收集查询匹配的所有文档,然后生成流。