2017-10-04 247 views
2

創建領先的情況我打與最近推出Cloud Firestore,我想知道是否有可能得到一個文檔的索引集合中創建一個排行榜。雲公司的FireStore

例如,假設我想要檢索用戶在排行榜中的位置。我會做這樣的事情:

db.collection('leaderboard').doc('usedId')

在那裏,我有一個rank字段,以顯示該用戶的在領先位置。但是,這意味着我必須創建一個雲端函數來計算用戶每次分數變化時的位置。考慮到根據CRUD操作數量計算的Firestore費用,這可能非常昂貴。

有沒有更好的方法來做到這一點?假設定義一個查詢字段(即分數),然後在集合的數組中獲取該文檔的索引?

+0

對於用戶最近來到這個問題,這其中可能會提供針對此問題的更好的幫助:https://stackoverflow.com/questions/46720997/leaderboard-ranking-with-firebase – Will

回答

1

除了通過實際運行查詢並讀取所有查詢之外,您無法在查詢結果中找到文檔的位置。這使得按分數排序僅僅用於確定排名是不可行的。

你可以減少寫入次數由分組行列成10或100塊更新的行列,然後只更新級別組時,它們之間的球員動作。絕對排名可以通過組內分數排序來確定。

如果您將這些等級組存儲爲單個文檔,則可能會節省大量成本。

注意,當你增加作家的數量的文檔這增加了競爭,所以你就需要對預期的成績提交率平衡組的大小來得到你想要的結果。

aggregation queries的技術可以適用於這個問題,但它們基本上有你在你的問題中描述的相同成本的權衡。