我正在学习AngularJS和Firebase,我正在玩一个简单的ChatApp,以了解代码。在Firebase规则中添加“.indexOn”:“.value”
我的火力地堡DB结构是这样的:
"chat": {
"messages": {
"chat1": { [ list of messages ] },
"chat2": { [ list of messages ] }
},
"rooms": {
"chat1": {
"users": {
"user1": true,
"user2": true
}
},
"chat2": {
"users": {
"user2": true,
"user3": true
}
}
}
}
由于火力地堡的保护规则,我不能添加聊天链接的用户节点,比需要我必须做一个火力地堡查询检索聊天室用户,在App Start Up上使用orderByChild()
查询。
使用火力地堡是简单的比我可以使用来获取所有聊天:
var chatLink = firebase.database().ref('chat/rooms');
chatLink
.orderByChild('users/' + userId)
.equalTo(true)
.once('value', function(chatSnap){
/* Do Some Stuff Here */
});
每一件事情的工作很好,但我收到的控制台的警告:
火力警告:使用未指定的索引。考虑加入“.indexOn”:‘用户/ {} userId的’于/聊天/间到您的安全规则,获得更好的性能
搜索在网络上,我发现,对于变量orderByChild()
查询,我可以通过用户.indexOn: .value
在我的Firebase规则。
我试图添加此规则:
{
"rules": {
"chat": {
"rooms": {
".indexOn": ".value"
}
}
}
}
但我仍然收到总是警告。我该如何解决它?
非常感谢!
谢谢,但如何处理“.indexOn”:“.value”这样的规则?我读过我可以在变量查询中使用它,但似乎不适用于我的情况... –
'.value'上的索引适用于'orderByValue '你的查询是'orderByChild'查询,所以它需要每个指定子的索引 –