2013-05-01 80 views
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],将被编组为JSON响应。我想知道是否有可能将Enumerator或Iteratee调整为Stream,因此我可以将其返回。

回答

1

可以使用collect[Stream]而不是enumerateCursor实例来做到这一点:

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

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

+0

关闭。返回一个Future [流[平安],但是当我尝试它,它只返回集合的第一个元素。 – Luciano 2013-05-01 21:48:51

+0

使用'cursor.toList.toStream'编辑。 – 2013-05-01 22:51:59

+1

你知道,如果,假设一千对象的集合,使用toList.toStream将加载所有的人都在内存中,从蒙戈,或者如果他们将获取一次一个? – Luciano 2013-05-01 22:58:08