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