在Firebase中过滤多个子属性上的产品

时间:2015-09-12 11:34:46

标签: javascript angularjs firebase nosql

我最近询问过如何根据子属性过滤产品(参见: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和类别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

1 个答案:

答案 0 :(得分:4)

从我读过的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"

对于'OR',我已经找了很长时间,没有找到任何帮助你。我建议两个单独的查询。