云开发数据库查询为什么返回空数组?

小钰欣 阅读 10

我在小程序里用云开发查数据库,明明有数据却总是返回空数组,是不是哪里写错了?

我用的是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); // 这里输出 []
    }
  });
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
宇文远香
这个问题我之前也踩过坑,折腾了大半天才发现是权限规则的问题。

你去云开发控制台看一下数据库的权限设置,默认创建的集合权限是"仅创建者可读写"。这个规则的意思是,只能查到当前用户自己创建的记录,查不到别人创建的,所以返回空数组。

解决办法很简单,把权限改成"所有用户可读,仅创建者可写",或者用自定义安全规则。

改完之后重新编译小程序就能查到了。

顺便提醒一下,云开发数据库还有一个坑是查询数量限制,默认最多返回20条记录。如果数据多的话,记得用 .limit() 或者分页查询,不然数据多了会截断。

另外也可以排查一下这几点:字段名有没有写错,数据库里的 status 值是不是字符串类型。如果存的是数字或者有大小写差异,也会查不到。

别走弯路,先改权限试试。
点赞 2
2026-03-01 19:25