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
相关产品推荐
相关产品推荐

