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

Querying data from Firebase using multiple filters

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

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

是否可以在 Firebase API 中使用多个过滤器来查询此数组中的产品。例如,我可能想按 brandcategory(所有 "Pants" 按 "Esprit" 过滤)。到目前为止,我已经尝试通过子键进行排序,然后限制此排序的开始和结束,但我不知道如何应用更多过滤器。

我正在使用 iOS SDK。

Firebase 一次只能 order/filter 一个 属性(或值)。如果您在单个查询中多次调用 orderBy... 方法,它将引发错误以指示这是不允许的。

实际上,在 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