我的.indexOn规则已添加到安全和规则中未被考虑在内

Sta*_*ble 2 firebase

我正在尝试在我的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" } }

我错过了什么吗?我将不胜感激任何帮助.

最好,

状态变量

Fra*_*len 5

根据有关通过其REST API检索数据Firebase文档:

REST API返回未完成的结果

JSON解释器不对结果集强制执行任何排序.虽然orderBy可以与startAt,endAt,limitToFirst或limitToLast结合使用以返回数据的子集,但返回的结果将不会被排序.因此,如果排序很重要,可能需要手动对结果进行排序.

该文档中确实存在样本和其他片段,似乎不同.但上述说法属实.

请记住,该orderBy参数用于更多内容,而不仅仅是返回有序结果.您还可以使用该方法过滤结果,即

GET 'https://testindexon.firebaseio.com/.json?orderBy="age"&equalTo=90'
Run Code Online (Sandbox Code Playgroud)

或者你会命令返回有限数量的结果:

GET 'https://testindexon.firebaseio.com/.json?orderBy="age"&limitToFirst=10'
Run Code Online (Sandbox Code Playgroud)

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