这是我的Firebase数据结构:
{
"companies": {
"-Ke_b8p6OBaz1VCeovAH": {
"display_name": "First User's Company",
"users": {
"ir7jjLPA3fXCVsdc4OzzSiH9RJd2": "admin"
}
},
"-Ke_cmhDaIeGJjFwsDI1": {
"display_name": "First User's Second Company",
"users": {
"ir7jjLPA3fXCVsdc4OzzSiH9RJd2": "admin"
}
},
"-Ke_b9OgwY2IBdj5szmJ": {
"display_name": "Second User's Company",
"users": {
"5XcpmN7DgEWNnmWZucyQiOh4TJt2": "admin"
}
}
},
"users": {
"ir7jjLPA3fXCVsdc4OzzSiH9RJd2": {
"display_name": "First User"
},
"5XcpmN7DgEWNnmWZucyQiOh4TJt2": {
"display_name": "Second User"
}
}
}
我正在尝试对此数据进行查询(例如,通过.REST):
example.firebase.com/companies.json?orderBy="users/ir7jjLPA3fXCVsdc4OzzSiH9RJd2"
我希望回归
{
"-Ke_b8p6OBaz1VCeovAH": {
"display_name": "First User's Company",
"users": {
"ir7jjLPA3fXCVsdc4OzzSiH9RJd2": "admin"
}
},
"-Ke_cmhDaIeGJjFwsDI1": {
"display_name": "First User's Second Company",
"users": {
"ir7jjLPA3fXCVsdc4OzzSiH9RJd2": "admin"
}
}
}
相反,我得到了
{
"error": "Index not defined, add \".indexOn\": \"users/ir7jjLPA3fXCVsdc4OzzSiH9RJd2\", for path \"/companies\", to the rules"
}
这是我的Firebase安全规则
{
"rules": {
".read": true,
".write": true,
// Companies
"companies": {
".indexOn": ["display_name", "users"],
}
}
}
为每个用户更新安全规则索引是不可行的,那么我该如何处理呢?
答案 0 :(得分:1)
Firebase不支持"过滤"在课堂意义上你习惯了。使用您当前的数据结构,您需要:
这些选项听起来很糟糕,但不管你信不信,Firebase的设计特别适用于"快速"在处理。它通过大规模弥补了代码/查询的低效率,因此在使用它时需要忘记许多特定于SQL的最佳实践,例如规范化数据,高效的查询/连接操作等。尽管看似额外的工作,如果您实际上对操作进行了基准测试(特别是如果启用了持久性/缓存等选项),即使使用这些额外的步骤,您也可以等于或超过SQL环境性能。可以把它想象为RISC与CISC,其中RISC是Firebase而CISC是SQL。