我无法通过firebase数据库规则索引数据。
我的数据如下:
entities
$entity_id
users
$user_id : true
我的firebase 3.x查询如下:
firebase.database().ref('entities')
.orderByChild('users/' + user.uid)
.equalTo(true)
.once('value')
我的规则如下:
{
"entities": {
"users": {
"$userId": {
".indexOn": ".value"
}
}
}
}
但我还是得到了这个:
FIREBASE WARNING:
Using an unspecified index.
Consider adding ".indexOn": "users/VShAzNsxGjOIIlcrrZsWCxuMuuH2"
at /entities to your security rules for better performance
我试过了:
Firebase Security Rules: .indexOn unique ids
和
Firebase .indexOn dynamic keys
谢谢你的帮助
答案 0 :(得分:0)
.indexOn
应与动态键平行放置,如下所示:
{
"entities": {
"users": {
".indexOn": ".value",
}
}
}
答案 1 :(得分:-1)
解决方法是更好的noSQL架构。
该查询将尝试过滤所有实体并检查是否找到userId。
实际上,您必须拥有像userEntities这样的引用,其中包含此用户所属的所有实体密钥 - 并通过这些密钥获取此用户实体。
您必须注意的一件事是,为firebase设计数据库是sequrity规则。 Sequrity规则最终决定这种类型的查询在客户端是否可以接受。 例如:
firebase.database()。ref('entities')。orderByChild('users /'+ user.uid)
是对“实体”根的调用,而不是对“entities / users / userId”的单独调用。因此,如果您想禁用所有其他实体的读取,但您必须尝试访问
.REF( '实体')。子(ENTITYID)
这是一个在任何地方都没有突出显示的事情。
关系数据库赢得了这一个IMO。
答案 2 :(得分:-3)