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

综敏 阅读 11

我在小程序里用云开发查数据库,明明有数据却一直返回空数组,是不是写法有问题?

我用的是 db.collection('todos').where({}).get(),本地调试和真机都试了,权限也设成所有用户可读了,还是不行。

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
一庆庆
一庆庆 Lv1
我猜你可能是踩了云开发数据库的两个常见坑:一个是云函数调用时没传 context,另一个是集合权限没真正生效。

先确认下你是直接在小程序端调用还是在云函数里调用。如果是小程序端,db.collection('todos').where({}).get() 这写法本身没问题,但得检查几个点:

第一,数据库集合的权限是不是真改对了。云开发控制台里点进集合,权限那里要选「所有用户可读」,而且得点「保存」,有时候改完没点保存就白搭。

第二,看下集合是不是真的有数据。你可以进数据库管理页面,手动删条数据再加一条试试,有时候数据是旧环境的,新集合没同步过去。

第三,如果你是在云函数里调用,记得要传 context,比如这样:

const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
const db = cloud.database({ context })

exports.main = async (event, context) => {
return await db.collection('todos').where({}).get()
}


context 不传的话,云函数默认查的是云函数自己的环境,数据自然查不到。

还有个小技巧,加个 .catch(err => console.error(err)) 看看有没有报错,有时候权限问题会返回 401001 错误码,比空数组更有线索。

更好的写法是查的时候加个 .field({ _id: true }).limit(1) 试试能不能查出一条,缩小排查范围。
点赞 1
2026-02-24 19:00