如何使用 Sails.js / Waterline 有效地分页大量查询结果?

How do I efficiently page a large collection of query results with Sails.js / Waterline?

我正在处理 Waterline ORM 背后的大型数据集。在几个用例中,我需要对记录的 many/most 进行一些处理 – 10's of thousands.

到目前为止,我一直在使用 .find(),但这会执行 returns 整个结果集。是否有 Sails/Waterline 迭代查询结果的方法——它保留了 ORM 的存储不可知方面?

你可以使用分页,比如 -> Model.find().paginate({page: xx, limit: xx});

更多信息在这里:http://sailsjs.org/documentation/concepts/models-and-orm/query-language 搜索分页:)

如果你想保持存储不可知水线特征你将不得不看看你的实际模式实现(甚至如果您正在编码 存储无关).

您可以:

  1. 使用像@holzanic 回答那样的分页,但是这可能会在某些存储技术中产生严重的性能问题。
  2. Use streams.
  3. 如果您要列出模型中的整个对象,您可以确保可以按 ID 进行分页。您可以在查询中获取前 n 个元素,然后尝试获取其 id 属性大于上一页最后接收到的下一页。