uniCloud小程序数据库查询问题:limit不生效,如何获取任意数量数据?

uniCloud开发小程序如何获取大于或小于100条的数据啊我的集合中有三百条数据我想让返回300条在小程序中是返回100条我想返回23条也是返回100条我使用了limit也不行自己去循环获取数据也不行

'use strict';
const db = uniCloud.database();
const collection = db.collection('user');
exports.main = async (event, context) => {
    try {
        const res = await collection.limit(23).get();
        return {
            code: 0,
            data: res.data,
            msg: '查询成功'
        };
    } catch (err) {
        return {
            code: 1,
            data: null,
            msg: err.message || '查询失败'
        };
    }
};

uniCloud开发小程序如何获取大于或小于100条的数据啊我的集合中有三百条数据我想让返回300条在小程序中是返回100条我想返回23条也是返回100条我使用了limit也不行自己去循环获取数据也不行

阅读 873
2 个回答

云函数名称建议:queryCollection

云函数代码:

'use strict';
const db = uniCloud.database();

exports.main = async (event, context) => {
  const {
    collectionName, // 集合名称
    query = {},      // 查询条件,如 { status: 1 }
    page = 1,        // 当前页码
    pageSize = 100,  // 每页条数,最大建议不超过300
    orderBy = [],    // 排序,如 [['create_time', 'desc']]
    field = null     // 字段筛选,如 ['name', 'age']
  } = event;

  const maxLimit = 100;
  const totalLimit = pageSize;
  const skipCount = (page - 1) * pageSize;

  try {
    const collection = db.collection(collectionName);

    let queryBuilder = collection.where(query);

    // 字段筛选
    if (field && Array.isArray(field)) {
      queryBuilder = queryBuilder.field(field.reduce((acc, cur) => {
        acc[cur] = true;
        return acc;
      }, {}));
    }

    // 排序
    if (orderBy && Array.isArray(orderBy)) {
      orderBy.forEach(([key, direction]) => {
        queryBuilder = queryBuilder.orderBy(key, direction);
      });
    }

    // 分页获取数据(突破100条限制)
    let allData = [];
    for (let i = 0; i < Math.ceil(totalLimit / maxLimit); i++) {
      const res = await queryBuilder
        .skip(skipCount + i * maxLimit)
        .limit(Math.min(maxLimit, totalLimit - i * maxLimit))
        .get();

      allData = allData.concat(res.data);

      if (res.data.length < maxLimit) break;
    }

    return {
      code: 0,
      data: allData,
      msg: '查询成功'
    };
  } catch (err) {
    return {
      code: 1,
      data: null,
      msg: err.message || '查询失败'
    };
  }
};

小程序端调用示例:

uniCloud.callFunction({
  name: 'queryCollection',
  data: {
    collectionName: 'user',
    query: { status: 1 },
    page: 1,
    pageSize: 300,
    orderBy: [['create_time', 'desc']],
    field: ['name', 'email']
  },
  success: res => {
    console.log('查询结果:', res.result.data);
  },
  fail: err => {
    console.error('调用失败:', err);
  }
});
头像
Hashan
    538
    新疆乌鲁木齐市

    limit 在没有限制的情况下,默认返回的是100条。你这个说明limit没有生效。你重启小程序编辑器,在uniapp 重新编译一下看看。

    撰写回答
    你尚未登录,登录后可以
    • 和开发者交流问题的细节
    • 关注并接收问题和回答的更新提醒
    • 参与内容的编辑和改进,让解决方法与时俱进
    推荐问题