我有一个名为products
的Firebase数组,其中包含类似这样的项目:
JhMIecX5K47gt0VaoQN: {
brand: "Esprit"
category: "Clothes",
gender: "Boys",
name: "Pants",
}
是否可以使用Firebase API使用多个过滤器查询此阵列中的产品。例如,我可能希望按brand
和category
(所有" Pants"" Esprit")进行过滤。到目前为止,我已尝试按子键进行排序,然后限制此排序的开始和结束,但我无法弄清楚如何应用更多过滤器。
我正在使用iOS SDK。
答案 0 :(得分:5)
Firebase一次只能对一个属性(或值)进行排序/过滤。如果您在单个查询中多次调用orderBy...
方法,则会引发错误以指示不允许这样做。
答案 1 :(得分:2)
实际上,在Firebase中,当您按特定键进行排序时,还会涉及另一个索引:推送ID(如果您使用它们)它们几乎按时间顺序排序,因此您可以按字段XXX加上时间进行排序。
在您的情况下,这不是时间,因此唯一的解决方案是使用其他复合索引:
JhMIecX5K47gt0VaoQN: {
brand: "Esprit"
category: "Clothes",
brandcategoryIndex: "EspritClothes",
categorybrandIndex: "ClothesEsprit",
brandnameIndex: "EspritPants",
namebrandIndex: "PantsEsprit",
gender: "Boys",
name: "Pants",
}
在上面的示例中,您可以通过以下方式进行查询:
只需确保将这些字段添加到规则部分的Firebase索引中,并在项目被修改时随时保留它们。
(在这种情况下,由Firebase强制执行的在性能上增加冗余数据成本的过程称为denormalization)