云开发数据库查询为什么返回空数组?
我在小程序里用云开发查数据库,明明有数据却总是返回空数组,是不是哪里写错了?
我用的是collection('products').where({status: 'active'}).get(),数据库里确实有 status 为 active 的记录,但结果就是空的。
试过在云函数里打印日志,也确认了权限是开放的,开发工具和真机都一样。这是我的查询代码:
const db = wx.cloud.database();
db.collection('products')
.where({
status: 'active'
})
.get({
success: res => {
console.log(res.data); // 这里输出 []
}
});
你去云开发控制台看一下数据库的权限设置,默认创建的集合权限是"仅创建者可读写"。这个规则的意思是,只能查到当前用户自己创建的记录,查不到别人创建的,所以返回空数组。
解决办法很简单,把权限改成"所有用户可读,仅创建者可写",或者用自定义安全规则。
改完之后重新编译小程序就能查到了。
顺便提醒一下,云开发数据库还有一个坑是查询数量限制,默认最多返回20条记录。如果数据多的话,记得用
.limit()或者分页查询,不然数据多了会截断。另外也可以排查一下这几点:字段名有没有写错,数据库里的 status 值是不是字符串类型。如果存的是数字或者有大小写差异,也会查不到。
别走弯路,先改权限试试。