在 Firebase 中使用多个 where 子句进行查询

Posted

技术标签:

【中文标题】在 Firebase 中使用多个 where 子句进行查询【英文标题】:Query with multiple where clauses in Firebase 【发布时间】:2017-06-26 09:53:59 【问题描述】:

我在使用 Firebase 查询时遇到了一些问题,主要是因为我正在查询的数据集的大小。

我想要实现的是:

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

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

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

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

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

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

【问题讨论】:

Query based on multiple where clauses in firebase的可能重复 绝对是重复的。那里接受的答案的策略 2 应该进行一些调整,以使排名数字可排序为字符串。 目前似乎导致问题的不是查询,而是它抛出的错误:Uncaught RangeError: Invalid string length @K20GH 你能设置一个重现问题的jsbin吗? 【参考方案1】:

您将需要创建一个组合键,因为您一次只能执行一个 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())
    )

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

【讨论】:

有没有快速更新现有记录的方法?我从限制每秒 1 次调用的第 3 方 API 中提取此信息。目前填充数据库需要将近 72 小时... 刚刚更新了我的答案。对于你的问题,虽然不是,但你不能那样做。使用 firebase,您必须在加载数据或使用某种 cron 作业时自行管理。 只是检查.. Firebase 是否不区分大小写?即 .startAt('A_00001') 会给 .startAt('a_00001') 提供不同的结果 查询和路径匹配区分大小写。 奇数。我现在已经这样做了,但它只为每个请求返回 null

以上是关于在 Firebase 中使用多个 where 子句进行查询的主要内容,如果未能解决你的问题,请参考以下文章

基于 Firebase 中多个 where 子句的查询

Firestore:多个条件 where 子句

使用文档 auto-id firebase 查询“where”子句

如何在 Firebase-DB 中查询“WHERE”子句之类的数据?

Firebase查询:“where”子句不起作用,继续返回所有文档

如何在 mysqli 准备语句中使用多个内部连接和多个 WHERE 子句? [复制]