2017-10-04 166 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的技术可以适用于这个问题,但它们基本上有你在你的问题中描述的相同成本的权衡。