收藏
回答

小程序云函数查询数据 排序orderBy 跟 limit均不生效,只是返回表中所有记录?

想实现一个 对 用户积分表,进行查询后筛选排序前4条记录,官方文档中似乎是说 单在小程序端不提供 排序功能,故放在 云函数中进行查询、 排序,并取 前4条符合条件的记录。

数据表设计如下,grade 字段为 number类型,表示年级,具体实现中,是打算查询 1年级中 积分 前4名的 积分记录。

云函数查询代码如下,使用了官方手册中能查到的两种方式查询,均不能成功筛选,代码如下

// 云函数入口文件
const cloud = require('wx-server-sdk')


cloud.init();
const db = cloud.database();
const $ = db.command.aggregate


// 云函数入口函数
exports.main = async (event, context) => {
    try{
    //let rank = 
    // await db.collection('rank')
    //     .where({
    //         grade: 1
    //     })
    //     .get({
    //         success: (res) => {
    //             console.log(res.data);
    //         }
    //     })
        return db.collection('rank')
            .aggregate()
            .match({
               grade: 1
            })
            .sort({
                point: -1
            })
            .limit(4)
            .end()
    } catch (error) {
        return error;
    }
    // return rank;
    // let rank = await db.collection('rank').aggregate()
    //     .match({
    //         grade: 1
    //     })
    //     .sort({
    //         point: -1,
    //     })
    //     .limit(4)
    //     .end();


    //console.log(rank);

}

疑惑的是,用 where 语句进行筛选时,成功返回了2次,那2次返回值均按 point字段进行了排序,并且 只返回 4条记录。

然而 在后续的编码测试中,两种方式都不能按要求返回 4条记录,也没有 按 point进行排序,

为方便排查原因,已经 将 grade 字段直接 匹配数字1,以排除传参问题。

小程序端调用代码如下

请问如何正确的实再 上述功能,查询 并返回 指定表 某字段 排序 后的前4条记录,我前面的代码没能实现功能,具体问题出在哪里?

最后一次编辑于  2020-04-24
回答关注问题邀请回答
收藏

2 个回答

  • 老张
    老张
    2020-04-23

    看看是不是因为权限问题?

    2020-04-23
    有用 1
    回复 3
    • 王老师@文升教育
      王老师@文升教育
      2020-04-23
      应该不是,只有权限读取,应该是没有返回值,我现在的困惑是返回得记录太多,没有只返回4条记录,也没有排序。
      如果说云函数没有正确调用,那么 应该没有返回值才对,而且第1种方式,我是清楚的记得 正确返回过2次,然而...
      2020-04-23
      回复
    • 老张
      老张
      2020-04-23回复王老师@文升教育
      你把return注释了?没有return
      2020-04-23
      回复
    • 王老师@文升教育
      王老师@文升教育
      2020-04-23回复老张
      用返回值的方式试过了,你可以看到我调用函数里有 痕迹,问题是一样的,就是  where orderBy limit 没起作用
      2020-04-23
      回复
  • 王老师@文升教育
    王老师@文升教育
    2020-04-24

    今天早上新开了一个项目,单独写了一个 调用脚本 调先前 返回所有记录那个 云函数,这次返回的结果是 正常的,回返回了 4条记录,并且 按 point 积分字段进行了排序

    个人怀疑 是不是 开发工具本身会有相应的 数据缓存,我中午回原先那个开发环境做同样的实验来对照着看看结果。

    事实上,数据库中类似的问题,不止遇到过一次

    之前有一次用 json文件导入数据库的方式,给云数据库初始化,但是做了好几次导入,insert 跟 upsert 两种不同的导入方式都试过,导完检查数据库,发现里面的数据还是老数,不是刚刚成功导入的 json文件中的数据,但是第二天似乎又可以成功导入

    2020-04-24
    有用
    回复
登录 后发表内容
问题标签