我的数据库如下所示:
"users": {
"2387653478": {
"score": 1000,
...
},
"8456756547": {
"score": 2000,
...
},
...
}我想按"score“做一个简单的排名排序,但我有很多用户,我应该在规则中添加一个indexOn来优化:
"rules": {
"users": {
"$user": {
".read": "auth != null",
".write": "auth != null && auth.token.firebase.identities['facebook.com'][0] === $user",
".indexOn": ["score"]
}
}
}当在规则中添加indexOn时,优化是否100%起作用?在添加indexOn之前创建的用户怎么办?
提前感谢!
发布于 2017-04-03 22:02:55
当您更新规则文件(通过Firebase Database console或命令行界面)时,Firebase数据库(Re)将创建规则中定义的所有索引。它对所有现有数据执行此操作,然后针对任何数据更改继续更新这些索引。
但是您在错误的级别上定义了索引。您希望允许在users节点上查询单个用户的分数。因此,您必须在users上定义索引
"rules": {
"users": {
".read": "auth != null",
".indexOn": ["score"]
"$user": {
".write": "auth != null && auth.token.firebase.identities['facebook.com'][0] === $user",
}
}
}您会注意到,我还将您的.read规则上移到了users。因为如果没有它,您就不会拥有对/users的读取权限,因此无法对其进行查询。
https://stackoverflow.com/questions/43184773
复制相似问题