React Native项目Firebase Realtime Database递增键下子节点equalTo查询方法
解决Firebase Realtime Database按coin_name筛选查询的方案
直接给出适配你需求的可运行代码,替换现有useEffect内的逻辑即可:
useEffect(()=>{ const fetchFilteredNews = async () => { // 这里传入你要筛选的目标币种名,示例为'algorand',可按需替换为变量 const targetCoin = 'algorand'; await database() // 确保newsKey的值为'/cnh/news',路径要完全匹配数据库结构 .ref(newsKey) // 按子字段coin_name排序筛选 .orderByChild('coin_name') .equalTo(targetCoin) .once('value') .then(snapshot => { const data = []; // 遍历查询结果,避免直接val()丢失排序 snapshot.forEach(childSnapshot => { data.push(childSnapshot.val()); }); const formattedResponse = formatMarketData(data, show); setNews(formattedResponse); }); }; fetchFilteredNews(); }, [show]);
关键注意事项
- 路径校验:务必确认
newsKey变量的值与数据库根路径下的/cnh/news完全匹配,路径拼写错误会直接返回空结果 - 字段校验:确认数据库内存储的币种字段名确实为
coin_name,大小写、下划线都要完全对应,拼写不一致会导致筛选失效 - 类型匹配:和你之前处理年份查询的逻辑一致,要保证
equalTo传入的参数类型和数据库内对应字段的存储类型完全匹配,当前你已经解决了Excel导入的字符串类型问题,直接传入字符串类型的目标币种名即可;如果后续要复用逻辑做年份筛选,将equalTo的参数转为整型即可 - 索引配置:为了提升查询性能同时避免大数量下查询失败,需要在Firebase Realtime Database的规则中添加对应字段的索引,配置示例如下:
{ "rules": { "cnh": { "news": { ".indexOn": ["coin_name", "year"] } } } }
内容的提问来源于stack exchange,提问作者alper yolcu
相关产品推荐
相关产品推荐

