想实现一个 对 用户积分表,进行查询后筛选排序前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条记录,我前面的代码没能实现功能,具体问题出在哪里?
看看是不是因为权限问题?
如果说云函数没有正确调用,那么 应该没有返回值才对,而且第1种方式,我是清楚的记得 正确返回过2次,然而...
今天早上新开了一个项目,单独写了一个 调用脚本 调先前 返回所有记录那个 云函数,这次返回的结果是 正常的,回返回了 4条记录,并且 按 point 积分字段进行了排序
个人怀疑 是不是 开发工具本身会有相应的 数据缓存,我中午回原先那个开发环境做同样的实验来对照着看看结果。
事实上,数据库中类似的问题,不止遇到过一次
之前有一次用 json文件导入数据库的方式,给云数据库初始化,但是做了好几次导入,insert 跟 upsert 两种不同的导入方式都试过,导完检查数据库,发现里面的数据还是老数,不是刚刚成功导入的 json文件中的数据,但是第二天似乎又可以成功导入