我正在使用 Firestore 構建游戲,我想顯示一個高分串列。
我目前通過以下查詢獲得了 10 個最高分:
const q = query(doc(db, "scores", title), orderBy("score", "desc"), limit(10));
除此之外,我想讓玩家知道他們與全球高分相比的表現如何。例如,如果他們獲得了第 956 的最高分,我希望他們知道他們的相對位置是 956。
我已經看到,對于cursors,可以為給定檔案提供偏移量,即:
const q = query(doc(db, "scores", title), orderBy("score", "desc"), limit(10), startAt(myScoreDocRef));
有沒有辦法從這個得到排序結果集中分數的邏輯索引?
uj5u.com熱心網友回復:
Firestore 最近添加了getCountFromServer()(API 參考)功能,非常適合這個用例。您可以創建一個查詢來匹配分數大于當前用戶分數的檔案并獲取計數,如下所示:
const currentUserScore = 24;
const q = query(
collection(db, 'users'),
orderBy('score', 'desc'),
where('score', '>', currentUserScore)
)
// number of users with higher score
const snapshot = await getCountFromServer(q)
console.log(`Your rank: ${snapshot.data().count 1}`)
但是,如果多個用戶具有相同的分數,他們將在此查詢中看到相同的排名。作為一種解決方法,您可以在分數之外添加另一個引數到排名,例如查詢具有相同分數的用戶并檢查用戶年齡左右。
計數查詢只需 1 次讀取(根據 Firebase 支持和檔案),因此它比查詢具有一定偏移量的用戶和手動計算排名更有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/516636.html
