如何为reactivemongo mongodb驱动程序设置`skip`(offset)?

时间:2016-08-21 10:32:21

标签: mongodb scala reactivemongo

我需要从查询中跳过许多文档(offset),并且只返回limit个后续文档。我知道以下天真的方法:

collection.find(BSONDocument())
  .cursor[T].collect[List](offset+limit).map(_.drop(offset))

但它并不是真的需要,因为它会在JVM内存中加载offset+limit个文档,而我想在“数据库”端过滤它们。

2 个答案:

答案 0 :(得分:5)

解决方案:使用QueryOpts。例如:

collection.find(BSONDocument())
  .options(QueryOpts(skipN = offset))
  .cursor[T].collect[List](limit)

请注意,使用skip效率不高,因为mongodb不支持有效分页,它只会通过遍历所有文档跳过所需的数字。

答案 1 :(得分:1)

VasyaNovikov回答肯定是对的。 Reactive mongo提供更直观的API:

collection.find(BSONDocument())
  .skip(offset)
  .cursor[T]
  .collect[List](limit, Cursor.FailOnError[List[T]]())