我的数据库如下所示:
"users": {
"2387653478": {
"score": 1000,
...
},
"8456756547": {
"score": 2000,
...
},
...
}
我想做一个简单的排名排序"得分"但我有很多用户,我应该在规则中添加一个indexOn来优化:
"rules": {
"users": {
"$user": {
".read": "auth != null",
".write": "auth != null && auth.token.firebase.identities['facebook.com'][0] === $user",
".indexOn": ["score"]
}
}
}
在规则中添加indexOn时,优化是否100%正常运行? 在添加indexOn之前创建的用户呢?
提前致谢!
答案 0 :(得分:1)
更新规则文件(通过Firebase Database console或通过CLI)时,Firebase数据库(重新)会创建规则中定义的所有索引。它为所有现有数据执行此操作,然后继续更新这些索引以进行任何数据更改。
但是你已经在错误的级别上定义了索引。您希望允许在单个用户的分数上查询users
节点。所以你必须在users
上定义索引:
"rules": {
"users": {
".read": "auth != null",
".indexOn": ["score"]
"$user": {
".write": "auth != null && auth.token.firebase.identities['facebook.com'][0] === $user",
}
}
}
您会注意到我还将.read
规则移至users
。因为没有它,你就没有/users
的读取权限,因此无法查询它。