我最近询问过如何根据子属性过滤产品(参见: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(返回product1
和product3
)
对于第一部分,我尝试过:
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
答案 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',我已经找了很长时间,没有找到任何帮助你。我建议两个单独的查询。