使用多个filter从Firebase查询数据

我有一个称为products的Firebase数组,其中包含以下项目:

 JhMIecX5K47gt0VaoQN: { brand: "Esprit" category: "Clothes", gender: "Boys", name: "Pants", } 

是否可以使用Firebase API使用多个filter查询此arrays中的产品。 例如,我可能希望按brandcategory进行过滤(所有“裤子”均为“Esprit”)。 到目前为止,我已尝试通过子键进行排序,然后限制此排序的开始和结束,但我无法弄清楚如何应用更多filter。

我正在使用iOS SDK。

Firebase一次只能对一个属性(或值)进行排序/过滤。 如果在单个查询中多次调用orderBy...方法,则会引发错误以指示不允许这样做。

实际上,在Firebase中,当您按特定键进行排序时,还会涉及另一个索引:推送ID(如果您使用它们)它们几乎按时间顺序排序,因此您可以按字段XXX加上时间进行排序。

更多细节在这里

在您的情况下,这不是时间,所以唯一的解决方案是使用其他复合索引:

 JhMIecX5K47gt0VaoQN: { brand: "Esprit" category: "Clothes", brandcategoryIndex: "EspritClothes", categorybrandIndex: "ClothesEsprit", brandnameIndex: "EspritPants", namebrandIndex: "PantsEsprit", gender: "Boys", name: "Pants", } 

在上面的示例中,您可以通过以下方式查询:

  • 类别>品牌(和其他方式)
  • 名称>品牌(和其他方式)

只需确保将这些字段添加到规则部分的Firebase索引中,并在项目修改时随时保留这些字段。

(这种在性能上增加冗余数据成本的过程,在这种情况下由Firebase强制执行,称为非规范化 )