You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Database组合orderByChild与startAt查询无返回结果问题

问题分析与解决办法

嘿,我瞅出你这个Firebase查询里的关键问题啦!你现在的查询逻辑是按creation_date这个数值类型的字段排序,但startAt()里传的却是一个post_id的字符串(-L9H3X-qZZt5WiAdsOKE),这就导致Firebase在比较的时候类型不匹配,结果肯定和你预期的不一样。

为什么不对?

你的数据里,-L9H3X-qZZt5WiAdsOKE这个节点对应的creation_date是20180404(数字),但你传的是字符串形式的post_id。Firebase会严格按类型比较:字符串是按字典序比对,数字是按数值大小比对,两者完全不是一个逻辑,自然查不到你想要的内容。

正确的两种做法

1. 按creation_date数值查询(如果你想找日期大于等于20180404的内容)

把startAt的参数换成对应节点的creation_date数值:

Query test = mDatabase.orderByChild("creation_date").startAt(20180404);

2. 按post_id字符串查询(如果你想找post_id大于等于-L9H3X-qZZt5WiAdsOKE的内容)

如果你的真实需求是按post_id的顺序筛选,那得把orderByChild改成post_id:

Query test = mDatabase.orderByChild("post_id").startAt("-L9H3X-qZZt5WiAdsOKE");

小提醒

Firebase查询里,orderByChild指定的字段类型,一定要和startAt/endAt传入的参数类型保持一致,不然比较逻辑会完全偏离预期哦!

内容的提问来源于stack exchange,提问作者Bootstrap Bill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:56:11