1
我在firebase數據庫中有一個排行榜。我爲score和userName設置了.indexOn
規則。我給它添加記錄,獲得前十名,這些速度很快,很容易在客戶端實現。使用函數在Firebase數據庫中訂購節點的子節點
但是檢索當前用戶的等級在客戶端可能會非常慢,因爲我必須獲取排行榜節點的子節點的完整列表並計數記錄,直到找到用戶記錄爲止......此排行榜可能會起來到10萬條記錄。更何況,這與巨大的網絡流量。
我想使用firebase函數在插入記錄時對記錄進行排序和排名,這樣我就可以儘可能保持網絡流量。
我的結構是這樣的:
"leaderboard": {
"user_id_xxxx":
{
"uid": "user_id_xxxx",
"userName" : "someone",
"score": 99999
"rank": 1
},
"user_id_xxxy":
{
"uid": "user_id_xxxy",
"userName" : "otherone",
"score": 99998
"rank": 2
}
}
於是我想出了一個代碼片段,但我不知道如何來訂購吧:
var functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var dbRef = functions.database.ref('/leaderboard');
exports.dbRefOnWriteEvent = dbRef.onWrite(event => {
const parentRef = event.data.ref.parent();
return parentRef.once('value').then(snapshot => {
var i = 1;
const updates = {};
snapshot.forEach(function(child) {
child.rank = i;
i++;
});
return parentRef.update(updates);
});
});
我明白任何建議和幫助,我還在學習node.js和Firebase功能