Firebase REST API单数据集查询异常:无法从多数据集中筛选单条数据
解决Firebase REST API查询返回全部数据的问题
我来帮你搞定这个问题!你现在遇到的情况是因为Firebase REST API的查询逻辑和你预想的不一样——直接用?Name=Alan这种参数是没法筛选数据的,得用它专门设计的查询参数才行。
正确的查询请求格式
要通过Name字段筛选出Alan的数据,你需要使用orderBy和equalTo这两个参数组合,具体请求应该是这样的:
https://mydatabase.firebaseio.com/user.json?orderBy="Name"&equalTo="Alan"
这个请求会告诉Firebase:按Name字段排序,然后返回所有Name等于"Alan"的数据,也就是你要的那条记录。
必须配置数据库索引
光改请求还不够,你得在Firebase控制台的数据库规则里给Name字段配置索引,不然这个请求会返回错误(提示需要创建索引)。配置规则的代码如下:
{ "rules": { "user": { ".indexOn": ["Name"] } } }
把这段规则替换掉你原来的数据库规则,保存之后再发起查询就可以正常返回目标数据了。
为什么原来的方法不行?
Firebase的REST API不支持普通HTTP请求那种?字段=值的直接过滤方式,它的查询是基于排序机制实现的——必须先指定orderBy字段,才能用equalTo/startAt/endAt等参数进行筛选。如果不按这个规则来,API就会忽略你的自定义参数,直接返回全部数据。
另外补充个小技巧:如果你知道目标用户的ID(比如Alan对应的1234567),直接请求下面的地址会更高效,不需要走查询逻辑:
https://mydatabase.firebaseio.com/user/1234567.json
内容的提问来源于stack exchange,提问作者Arane
相关产品推荐
相关产品推荐

