【问题标题】: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]]())
      

      【讨论】:

        猜你喜欢
        • 2015-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-13
        • 1970-01-01
        • 2016-03-13
        • 2018-07-18
        • 1970-01-01
        相关资源
        最近更新 更多