在Firebase中查询多个where子句

时间:2017-02-08 16:45:21

标签: firebase firebase-realtime-database

我对Firebase查询有点麻烦,主要是因为我查询的数据集的大小。

我想要达到的目标是:

  

找到brandStartsWith =' A'的所有T恤。和salesRank介于1和100之间

我已经开始填补这个问题了,但我遇到了一个问题,即由于T恤内有超过300,000条记录,我似乎无法获取数据。

如果在页面加载时在React中调用它,一段时间后我在控制台中收到以下错误:

  

未捕获RangeError:字符串长度无效

这是我用来启动我的代码,但我不知道该去哪里。看看this question上的解决方案,似乎我需要按照下面的查询下载数据,然后在客户端对其进行排序。我似乎无法做的事情

  firebase.database().ref('tshirts')
    .orderByChild('brandStartsWith')
    .equalTo('A')
    .once('value', function (snapshot) {
       console.log(snapshot.val())
   })

1 个答案:

答案 0 :(得分:2)

您将需要创建组合键,因为您一次只能执行一个where子句。

{
    "tShirts" : {
        "brandStartsWith" : 'A',
        "salesRank" : 5
        "brandStartsWith_salesRank" = 'A_00005' //pad for as many sales ranks as you have
    }, {
        "brandStartsWith" : 'B',
        "salesRank" : 108
        "brandStartsWith_salesRank" = 'B_00108' //pad for as many sales ranks as you have
    }, {
        "brandStartsWith" : 'C',
        "salesRank" : 52
        "brandStartsWith_salesRank" = 'C_00052' //pad for as many sales ranks as you have
    }
}

这将允许您执行此查询:

firebase.database().ref('tshirts')
    .orderByChild('brandStartsWith_salesRank')
    .startAt('A_00001')
    .endAt('A_00100')
    .once('value', function (snapshot) {
        console.log(snapshot.val())
    })

不要忘记将您的规则更新为.index brandStartsWith_salesRank