使用多个过滤器从 Firebase 查询数据
Querying data from Firebase using multiple filters
我有一个名为 products
的 Firebase 数组,其中包含如下项目:
JhMIecX5K47gt0VaoQN: {
brand: "Esprit"
category: "Clothes",
gender: "Boys",
name: "Pants",
}
是否可以在 Firebase API 中使用多个过滤器来查询此数组中的产品。例如,我可能想按 brand
和 category
(所有 "Pants" 按 "Esprit" 过滤)。到目前为止,我已经尝试通过子键进行排序,然后限制此排序的开始和结束,但我不知道如何应用更多过滤器。
我正在使用 iOS SDK。
Firebase 一次只能 order/filter 一个 属性(或值)。如果您在单个查询中多次调用 orderBy...
方法,它将引发错误以指示这是不允许的。
实际上,在 Firebase 中,当您按特定键排序时,还涉及另一个索引:推送 ID(如果您使用它们)它们几乎完全按时间顺序排列,因此您按字段 XXX 加时间排序。
在你的情况下,这不是时间问题,所以唯一的解决办法是使用额外的复合索引:
JhMIecX5K47gt0VaoQN: {
brand: "Esprit"
category: "Clothes",
brandcategoryIndex: "EspritClothes",
categorybrandIndex: "ClothesEsprit",
brandnameIndex: "EspritPants",
namebrandIndex: "PantsEsprit",
gender: "Boys",
name: "Pants",
}
在上面的例子中,您可以通过:
查询
- 类别 > 品牌(反之亦然)
- 名称 > 品牌(反之亦然)
只需确保将这些字段添加到规则部分的 Firebase 索引中,并在修改项目时随时维护它们。
(这种为了提高性能而增加冗余数据成本的过程,在这种情况下由 Firebase 强制执行,称为 denormalization)
我有一个名为 products
的 Firebase 数组,其中包含如下项目:
JhMIecX5K47gt0VaoQN: {
brand: "Esprit"
category: "Clothes",
gender: "Boys",
name: "Pants",
}
是否可以在 Firebase API 中使用多个过滤器来查询此数组中的产品。例如,我可能想按 brand
和 category
(所有 "Pants" 按 "Esprit" 过滤)。到目前为止,我已经尝试通过子键进行排序,然后限制此排序的开始和结束,但我不知道如何应用更多过滤器。
我正在使用 iOS SDK。
Firebase 一次只能 order/filter 一个 属性(或值)。如果您在单个查询中多次调用 orderBy...
方法,它将引发错误以指示这是不允许的。
实际上,在 Firebase 中,当您按特定键排序时,还涉及另一个索引:推送 ID(如果您使用它们)它们几乎完全按时间顺序排列,因此您按字段 XXX 加时间排序。
在你的情况下,这不是时间问题,所以唯一的解决办法是使用额外的复合索引:
JhMIecX5K47gt0VaoQN: {
brand: "Esprit"
category: "Clothes",
brandcategoryIndex: "EspritClothes",
categorybrandIndex: "ClothesEsprit",
brandnameIndex: "EspritPants",
namebrandIndex: "PantsEsprit",
gender: "Boys",
name: "Pants",
}
在上面的例子中,您可以通过:
查询- 类别 > 品牌(反之亦然)
- 名称 > 品牌(反之亦然)
只需确保将这些字段添加到规则部分的 Firebase 索引中,并在修改项目时随时维护它们。
(这种为了提高性能而增加冗余数据成本的过程,在这种情况下由 Firebase 强制执行,称为 denormalization)