Firebase实时数据库按日期排序报错:索引未定义问题求助
Firebase实时数据库查询提示索引未定义的解决方法
数据JSON结构
{ "results": { "first": { "created_at": "ISOstring" }, "second": { "created_at": "ISOstring" }, "etc": { "created_at": "ISOstring" } } }
查询代码(Firebase服务文件)
async function getLastFive() { const resultsRef = ref(db, 'results') const lastFiveResultsQuery = query(resultsRef, orderByChild("created_at"), limitToLast(5)) try { const response = await get(lastFiveResultsQuery) const firebaseResults = response.val() as FirebaseResults const output = firebaseResultsToArray(firebaseResults) return output } catch (error) { throw error } }
报错信息
Error: Index not defined, add ".indexOn": "created_at", for path "/results", to the rules
at eval (index.esm2017.js?3595:11058:1)
at async Object.getLastFive (database.ts?5927:51:22)
现有配置文件
firebase.json
{ "database": { "rules": "database.rules.json" }, "emulators": { "database": { "port": 9000, "rules": "database.rules.json" }, "auth": { "port": 5001 }, "ui": { "enabled": true }, "singleProjectMode": true } }
database.rules.json
{ "rules": { ".read": true, ".write": true, "results": { ".indexOn": "created_at" } } }
解决步骤
- 重启数据库模拟器:修改规则文件后,模拟器不会自动刷新配置。关闭当前模拟器进程,重新执行
firebase emulators:start启动,确保新索引规则加载生效。 - 验证规则是否正确应用:打开模拟器UI(默认地址
http://localhost:4000),进入数据库页面的「Rules」标签,确认规则中results节点下存在.indexOn: "created_at"配置。若显示旧规则,重复重启步骤。 - 检查数据路径与类型:确认数据存储路径和规则中的
results完全匹配,同时确保所有results子节点的created_at字段均为字符串类型(ISO格式),类型不一致会导致索引失效。
内容的提问来源于stack exchange,提问作者ruslanonly
相关产品推荐
相关产品推荐

