Firebase Realtime Database多级动态键.indexOn配置失效排查
问题原因及解决方案
你的问题出在Firebase实时数据库规则的索引位置错误。
核心逻辑梳理
从数据结构和查询逻辑来看:
- 你是在
$url节点(比如chrome%3A%2F%2Fextensions%2F)下,对所有子节点(动态生成的$id)按createdAt字段排序查询。 - 但你当前的规则把
.indexOn: ["createdAt"]定义在了$id节点内部,这是给$id的子字段建索引,完全不符合查询的层级需求。
Firebase要求:你在哪个节点执行orderByChild查询,就需要在哪个节点的规则里定义对应的.indexOn。
修正后的规则配置
把索引定义移到$url节点下,这样每个动态生成的$url节点都会自动为其下的子节点按createdAt建立索引:
{ "rules": { ".read": "auth != null", ".write": "auth != null", "$url": { ".indexOn": ["createdAt"], // 移到这里,对应查询的层级 "$id": { // 可根据需求添加$id节点的读写权限规则 } } } }
验证逻辑
修正后,当你在chrome%3A%2F%2Fextensions%2F节点执行orderByChild("createdAt")查询时,Firebase就能找到对应的索引,不会再抛出索引未定义的错误。
内容的提问来源于stack exchange,提问作者Ugur Kellecioglu
相关产品推荐
相关产品推荐

