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