【问题标题】:Filter products on multiple child properties in Firebase在 Firebase 中过滤多个子属性的产品
【发布时间】:2015-09-12 11:34:46
【问题描述】:

我最近询问如何根据子属性过滤产品(请参阅:Filter products based on the sub child in Firebase)。

作为回顾,我的结构如下所示:

products/
     product1
        /author: 12345
        /title: "Awesome"
        /category: "catA"
        /description: "more awesome"
     product2
        /author: 67890
        /title: "Other"
        /category: "catB"
        /description: "otherawesome"
     product3
        /author: 12345
        /title: "Billy"
        /category: "catB"
        /description: "otherawesome"

要过滤出作者12345的所有产品,我们可以简单地使用:

ref.child("products").orderByChild('author').equalTo(12345)...

但是,当我有多个 AND 语句或多个 OR 语句时该怎么办?

如果我想过滤掉怎么办:

  • 作者12345 AND 类别catA 的所有产品(返回product1

  • 作者为 12345 或作者 67890 的所有产品(返回 product1product3

对于第一部分,我尝试了:

ref.child("products").orderByChild('author').equalTo(12345).orderByChild('category').equalTo('catA')...

但这不起作用(抛出错误You can't combine multiple orderBy calls

另请参阅: https://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries

【问题讨论】:

标签: javascript angularjs firebase nosql


【解决方案1】:

从我读过的here 来看,这样做的方法是执行第一个查询(最好是返回最少结果的那个),然后在 javascript 中按另一个字段进行过滤。另一种方法,如果您经常执行此查询,我建议您这样做,是为查询创建一个复合索引,例如;上面链接中 Frank van Puffelen 的回答举了一个例子。

products/
     product1
        /author: 12345
        /title: "Awesome"
        /category: "catA"
        /description: "more awesome"
        /author_category: "12345_catA"
     product2
        /author: 67890
        /title: "Other"
        /category: "catB"
        /description: "otherawesome"
        /author_category: "67890_catB"
     product3
        /author: 12345
        /title: "Billy"
        /category: "catB"
        /description: "otherawesome"
        /author_category: "12345_catB"

至于“或”,我已经找了很长时间,但没有找到对您有帮助的东西。我建议两个单独的查询。

【讨论】:

  • 非常感谢您的反馈。是的,我猜复合索引是最好的选择。
猜你喜欢
  • 2011-06-22
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
相关资源
最近更新 更多