Firebase查询返回错误数据:如何排除无Pricing键的用户档案
解决Firebase查询排除无Pricing键的用户档案问题
这是因为Firebase Realtime Database在按Pricing子节点排序时,没有该键的档案会被视为值为null,而null在排序优先级里会排在所有整数的前面,所以你的queryEnding(atValue:)会把这些无Pricing的档案也包含进来。
要排除这类档案,你只需要在查询中额外添加一个queryStarting(atValue:)条件,让查询只包含值大于null的条目——因为任何整数(无论正负)都比null大,所以可以设置起始值为整数类型的最小值,或者根据你的业务场景(比如定价都是非负的)设置为0。
修改后的代码示例
usersReference = Database.database().reference(fromURL: "https://someRef") .child("users") .queryOrdered(byChild: "Pricing") .queryStarting(atValue: NSNumber(value: Int.min)) // 覆盖所有整数类型的Pricing .queryEnding(atValue: pricingToSearch) .observe(...)
如果你的Pricing都是非负整数,也可以简化成:
.queryStarting(atValue: 0)
额外注意事项
别忘了在Firebase控制台的数据库规则中添加Pricing字段的索引,否则查询可能无法高效执行:
{ "rules": { "users": { ".indexOn": "Pricing" } } }
内容的提问来源于stack exchange,提问作者Dario Da
相关产品推荐
相关产品推荐

