Firebase Database JavaScript v9中equalTo()函数筛选数据异常问题
问题原因
你调整后的代码中equalTo多传了第二个参数,当你已经通过orderByChild('type')指定了排序字段之后,equalTo只需要传入你要匹配的目标值即可,不需要重复指定字段名。
正确实现代码
import { ref, query, orderByChild, equalTo, get } from "firebase/database"; // 构造查询:筛选request-log下type为Error的所有数据 const readNewLogEntries = query( ref(db, 'request-log'), orderByChild('type'), equalTo('Error') // 仅传要匹配的目标值即可 ); // 执行查询获取数据的示例代码 get(readNewLogEntries) .then((snapshot) => { if (snapshot.exists()) { const logList = []; snapshot.forEach((childSnap) => { logList.push({ id: childSnap.key, ...childSnap.val() }); }); console.log('匹配到的日志数据:', logList); } else { console.log('未找到对应类型的日志记录'); } }) .catch((err) => { console.error('查询执行失败:', err); });
如果需要筛选type为Request的记录,直接把equalTo的参数改为'Request'即可,注意匹配值的大小写要和数据库中存储的完全一致,Firebase实时数据库的查询是大小写敏感的。
注意事项
请提前给request-log节点配置字段索引,避免大数据量下查询失败或者性能损耗,你可以在Firebase控制台的数据库规则中添加如下配置:
{ "rules": { "request-log": { ".indexOn": "type", // 其余原有规则保持不变 } } }
内容的提问来源于stack exchange,提问作者georgewoofbates
相关产品推荐
相关产品推荐

