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

Swift查询Firebase Realtime Database指定owner记录返回null修复

错误原因

你的代码有两个核心问题:

  • 路径拼接错误:直接调用promoCodes.child("owner")相当于访问PromoCodes/owner这个独立节点,而owner是PromoCodes下每个子条目自带的属性,不是PromoCodes的直接子节点,所以永远查不到数据。
  • 判断逻辑错误:Firebase查询即使没有匹配到任何结果,返回的snapshot对象也不会是nil,仅能通过snapshot.exists()判断是否有匹配数据;且你原逻辑把snapshot == nil赋值给isAffiliate,判断结果完全写反。
修正后的实现
var promoCodes: DatabaseReference {
    return ref.child("PromoCodes")
}


func getIsAffiliate() {
    // 先指定按子字段owner排序,再匹配值为33206的条目
    promoCodes.queryOrdered(byChild: "owner")
        .queryEqual(toValue: 33206)
        .observeSingleEvent(of: .value) { snapshot in
            print("SNAP HERE: \(snapshot)")
            AffiliateService.isAffiliate = snapshot.exists()
        }
}
注意事项
  • 如果运行后还是查不到结果,检查数据库里owner字段存储的类型:如果存的是字符串"33206"而非数字33206,需要把queryEqual的参数改成字符串"33206",类型不匹配会导致查询失效。
  • 当PromoCodes下数据量较大时,建议在数据库安全规则中给owner字段添加索引,避免全量扫描拖慢查询速度,索引配置参考:
{
  "rules": {
    "PromoCodes": {
      ".indexOn": ["owner"]
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:55:00