我正在學習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'查詢,所以它需要每個指定子的索引 –