Mongodb Realm Scheduled Trigger查询全量文档返回空问题求助
Realm Scheduled Trigger 全量查询返回空问题解决方案
问题根因
导致该问题的常见原因有3类:
- 代码层未正确处理find返回的游标对象,直接序列化游标得到空结果
- Trigger执行身份权限不足,非系统用户角色被权限规则拦截了全量查询结果
- 集合的读取规则配置了隐式过滤条件,默认只返回符合特定字段要求的文档
解决步骤
- 修正查询代码,显式拉取全量结果
MongoDB 驱动中find接口返回的是游标对象,需要调用toArray()方法才能加载实际的文档数组,修改后的代码如下:
const collection = context.services.get("Cluster0").db("testdocument").collection("testcollection"); return collection.find({}).toArray().then((result)=>{ console.log('data : ',JSON.stringify(result)); })
- 调整Trigger执行身份
进入Realm控制台对应Scheduled Trigger的配置页,将「执行身份(Execute As)」设置为系统用户(System User),系统用户会绕过所有权限规则,直接读取集合的所有文档,避免权限拦截导致的结果丢失。
如果需要使用自定义角色执行,需要确认对应角色对testcollection集合的读取权限配置为{}(允许读取所有文档)。 - 检查集合读取规则
进入Realm控制台「数据访问」->「规则」页面,找到testcollection对应的读取规则,确认规则没有硬编码{"isActive":"true"}这类过滤条件,也没有设置仅当查询携带特定参数时才允许读取的规则。如果不需要细粒度权限控制,直接将Read规则设置为true即可。
验证方法
修改完成后可以直接在Realm控制台的函数测试页运行上述代码,无需等待触发器定时触发,即可快速验证查询结果是否正常。
内容的提问来源于stack exchange,提问作者Gourav Bhardwaj
相关产品推荐
相关产品推荐

