collection.skip

解释:查询返回结果时从指定序列后的结果开始返回,可用于分页。

参数说明

该方法的传入参数为必填参数,参数类型为数字类型,用来指定查询返回结果开始的序列。

代码示例 1

  1. swan.cloud.init({
  2. env: 'envId'
  3. });
  4. const db = swan.cloud.database();
  5. db.collection('users')
  6. .skip(10)
  7. .get()
  8. .then(res => {
  9. console.log(res);
  10. })
  11. .catch(err => {
  12. console.warn(err);
  13. });

获取第二页的用户信息,假设一页 10 条,现在要取第 2 页,则可以指定 skip 10 条记录

代码示例 2

  1. swan.cloud.init({
  2. env: 'envId'
  3. });
  4. const db = swan.cloud.database();
  5. db.collection('users')
  6. // 跳过结果集中的前 10 条,从第 11 条开始返回
  7. .skip(10)
  8. // 限制返回数量为 10 条
  9. .limit(10)
  10. .get()
  11. .then(res => {
  12. console.log(res);
  13. })
  14. .catch(err => {
  15. console.warn(err);
  16. });

下面是在云函数端获取一个集合所有记录的例子,因为有最多一次取 100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取:

代码示例 3

  1. const cloud = require('swan-server-sdk')
  2. cloud.init()
  3. const db = cloud.database()
  4. const MAX_LIMIT = 100
  5. exports.main = async (event, context) => {
  6. // 先取出集合记录总数
  7. const countResult = await db.collection('users').count()
  8. const total = countResult.total
  9. // 计算分几次取
  10. const batchTimes = Math.ceil(total / 100)
  11. // 所有读操作的 promise 的数组
  12. const tasks = []
  13. for (let i = 0; i < batchTimes; i++) {
  14. const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
  15. tasks.push(promise)
  16. }
  17. // 等待所有数据被取出
  18. return (await Promise.all(tasks)).reduce((acc, cur) => {
  19. return {
  20. data: acc.data.concat(cur.data),
  21. errMsg: acc.errMsg,
  22. }
  23. })
  24. }