使用多个过滤器从Firebase查询数据

时间:2015-02-19 11:02:42

标签: ios swift filter firebase

我有一个名为products的Firebase数组,其中包含类似这样的项目:

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

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

我正在使用iOS SDK。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

More details here

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

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

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

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

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

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