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

Firebase数据库查询问题:如何获取category值为groomer的所有节点?

解决Firebase查询category为"groomer"节点的问题

你的查询代码存在两处问题:

  • 多余的child("$servicesId"):services本身就是存放所有服务节点的父节点,无需添加该占位符路径。
  • 查询方法调用错误:按子节点值过滤时,需先通过queryOrdered(byChild:)指定要匹配的子节点键,再用queryEqual(toValue:)匹配目标值。

正确的查询代码

let rootRef = Database.database().reference()
// 先指定按"category"子节点排序,再筛选值为"groomer"的节点
let ref = rootRef.child("services").queryOrdered(byChild: "category").queryEqual(toValue: "groomer")

// 获取并处理查询结果
ref.observeSingleEvent(of: .value) { snapshot in
    guard let servicesDict = snapshot.value as? [String: [String: String]] else {
        print("无匹配数据")
        return
    }
    // 遍历所有符合条件的节点
    for (serviceId, serviceInfo) in servicesDict {
        let name = serviceInfo["name"] ?? ""
        let category = serviceInfo["category"] ?? ""
        print("服务ID:\(serviceId),名称:\(name),分类:\(category)")
    }
}

额外注意事项

  • 需在Firebase控制台的数据库规则中,为services节点配置category字段的索引,否则查询可能失效,规则示例:
{
  "rules": {
    "services": {
      ".indexOn": ["category"]
    }
  }
}
  • 若需要实时监听数据变化,可将observeSingleEvent(of: .value)替换为observe(.value)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:50:58