我正在尝试在我的Firebase数据上设置自定义索引,以对某些字段进行排序。

这是我的数据:

获取https://testindexon.firebaseio.com/.json

{ "key1": { "age": 80, "name": "zabc" }, "key2": { "age": 90, "name": "defg" }, "key3": { "age": 10, "name": "hijk" }}

这是我的安全规则:

{ "rules": { ".read": true, ".write": true, "testindexon": { ".indexOn": "age" } }}

当我尝试通过索引的“ age”属性进行排序时,出现错误:

获取https://testindexon.firebaseio.com/.json?orderBy=“年龄”

错误400(错误请求)

{ "error": "Index not defined"}

通过重写安全规则,我可以解决400错误:

{ "rules": { ".read": true, ".write": true, ".indexOn": ["age", "name"] }}

但是,当我尝试按属性之一进行排序时,没有什么特别的事情发生(结果未排序):

GET .... firebaseio.com/.json?orderBy="age“

{ "key1": { "age": 80, "name": "zabc" }, "key2": { "age": 90, "name": "defg" }, "key3": { "age": 10, "name": "hijk" }}

我想念什么吗?我将不胜感激任何帮助。

最好,

状态变量

最佳答案

根据Firebase documentation on retrieving data through its REST API

REST API返回错误的结果
JSON解释器不对结果集执行任何排序。虽然orderBy可以与startAt,endAt,limitToFirst或limitToLast结合使用以返回数据的子集,但返回的结果将不进行排序。因此,如果排序很重要,则可能有必要手动对结果进行排序。

实际上,该文档中确实有样本和其他片段,似乎暗示了其他问题。但是以上说法是正确的。
请记住,除了返回有序结果之外,orderBy参数用于更多的事情。您还可以使用该方法过滤结果,即

GET 'https://testindexon.firebaseio.com/.json?orderBy="age"&equalTo=90'

或者您将命令返回有限数量的结果:
GET 'https://testindexon.firebaseio.com/.json?orderBy="age"&limitToFirst=10'

因此,在这些情况下,子节点将在服务器上排序,然后进行过滤,但是返回值将/可能仍包含不确定顺序的其余子节点。

关于firebase - 我的.indexOn规则未添加到“安全性和规则”中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29583177/

10-13 07:18