【问题标题】:How do I set `skip` (offset) for reactivemongo mongodb driver?如何为 reactivemongo mongodb 驱动程序设置“skip”(偏移量)?
【发布时间】:2016-08-21 10:32:20
【问题描述】:
我需要从查询中跳过一些文档 (offset),只返回 limit 后面的文档数。我知道以下幼稚的方法:
collection.find(BSONDocument())
.cursor[T].collect[List](offset+limit).map(_.drop(offset))
但这并不是真正需要的,因为它会在 JVM 内存中加载 offset+limit 数量的文档,而我想在“数据库”端过滤它们。
【问题讨论】:
标签:
mongodb
scala
reactivemongo
【解决方案1】:
解决方案:使用QueryOpts。示例:
collection.find(BSONDocument())
.options(QueryOpts(skipN = offset))
.cursor[T].collect[List](limit)
请注意,使用skip 效率不是很高,因为mongodb 不支持有效的分页,它只会通过遍历所有文档来跳过所需的数字。
【解决方案2】:
VasyaNovikov 的回答肯定是正确的。 Reactive mongo 提供了更直观的 API:
collection.find(BSONDocument())
.skip(offset)
.cursor[T]
.collect[List](limit, Cursor.FailOnError[List[T]]())