在 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())
)
不要忘记将您的规则更新为.index
brandStartsWith_salesRank
【讨论】:
有没有快速更新现有记录的方法?我从限制每秒 1 次调用的第 3 方 API 中提取此信息。目前填充数据库需要将近 72 小时... 刚刚更新了我的答案。对于你的问题,虽然不是,但你不能那样做。使用 firebase,您必须在加载数据或使用某种 cron 作业时自行管理。 只是检查.. Firebase 是否不区分大小写?即 .startAt('A_00001') 会给 .startAt('a_00001') 提供不同的结果 查询和路径匹配区分大小写。 奇数。我现在已经这样做了,但它只为每个请求返回 null以上是关于在 Firebase 中使用多个 where 子句进行查询的主要内容,如果未能解决你的问题,请参考以下文章
使用文档 auto-id firebase 查询“where”子句
如何在 Firebase-DB 中查询“WHERE”子句之类的数据?