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

UX-乙涵 阅读 6

我在小程序里用云开发查数据库,明明后台有数据,但 query.get() 返回的是空数组,是不是写法有问题?

我试过加 where 条件、不加条件,也检查了权限是“仅创建者可读写”,但当前用户就是创建者啊。控制台也没报错,就是 data 里是空的。

const db = wx.cloud.database()
db.collection('todos').get({
  success(res) {
    console.log(res.data) // 输出 []
  },
  fail(err) {
    console.error(err)
  }
})
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
丽红 ☘︎
看起来问题出在权限设置上。虽然你说设置了“仅创建者可读写”,但这个规则可能会导致其他问题,比如数据文档里存储的 _openid 和当前用户不匹配。

建议先用云函数查询,这样能绕过前端的权限限制来排查问题。云函数里的数据库访问默认是管理权限。

另外你的代码写法可以更优雅点。试试这样重构:

const db = wx.cloud.database()
db.collection('todos').get().then(res => {
console.log(res.data)
}).catch(err => {
console.error(err)
})


如果云函数查询也有问题,就在云开发控制台直接查看数据结构,特别是检查 _openid 字段是否正确。有时候小程序端登录态没维护好也会导致这个问题。

记得调试时可以在云开发控制台直接运行数据库查询语句,这比在小程序里调试方便多了。
点赞
2026-03-28 08:42