【发布时间】:2014-08-30 20:01:28
【问题描述】:
我正在使用 play2 和 reactivemongo 从 mongodb 获取结果。结果的每一项都需要转换以添加一些元数据。之后我需要对其进行一些排序。
为了处理我使用enumerate()的转换步骤:
def ideasEnumerator = collection.find(query)
.options(QueryOpts(skipN = page))
.sort(Json.obj(sortField -> -1))
.cursor[Idea]
.enumerate()
然后我创建一个Iteratee如下:
val processIdeas: Iteratee[Idea, Unit] =
Iteratee.foreach[Idea] { idea =>
resolveCrossLinks(idea) flatMap { idea =>
addMetaInfo(idea.copy(history = None))
}
}
最后我喂了 Iteratee:
ideasEnumerator(processIdeas)
现在我被困住了。我看到的每个示例都在foreach 中做了一些println,但似乎并不关心最终结果。
那么当所有文档都返回并转换后,我如何获得序列、列表或其他可以进一步处理的数据类型?
【问题讨论】:
-
Iteratee.foreach纯粹是面向副作用的(它实际上是大多数集合类型上foreach的约定)并返回Unit。你想要的可能是fold的变体。 -
如果您可以使用
List,您可以使用enum.run(Iteratee.getChunks)。
标签: scala playframework playframework-2.0 reactivemongo