Dan*_*maa 1 javascript firebase
我正在使用Firebase构建排行榜.使用Firebase的优先级系统跟踪玩家在排行榜中的位置.
在程序执行的某个时刻,我需要知道给定用户在排行榜中的位置.我可能有成千上万的用户,因此遍历所有用户以找到具有相同ID的对象(因此给我索引)实际上不是一个选项.
是否有更高效的方法来确定Firebase中有序列表中对象的索引?
编辑:我想弄清楚以下内容:
/
---- leaderboard
--------user4 {...}
--------user1 {...}
--------user3 {...} <- what is the index of user3, given a snapshot of user3?
--------...
Run Code Online (Sandbox Code Playgroud)
如果您正在处理数十或数百个元素并且不介意带宽受到打击,请参阅Kato答案.
如果您正在处理记录的原因,您需要遵循原则上在pperrin答案中概述的方法.以下答案详细说明.
Flashlight是一个方便的节点脚本,可以将elasticsearch与Firebase数据同步.
在撰写本文时,Flashlight无法告诉ElasticSearch您只对匹配的文档数量感兴趣,而不是文档本身.
我已提交此pull请求,该请求使用简单的单行修复来添加此功能.如果在您阅读此答案时没有关闭,只需手动更改手电筒的副本/分支.
这是我通过Firebase发送的查询:
{
index: 'firebase',
type: 'allTime',
query: {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"range": {
"points": {
"gte": minPoints
}
}
}
}
},
options: {
"search_type": "count"
}
};
Run Code Online (Sandbox Code Playgroud)
替换points为您的用户的字段跟踪点的名称,以及minPoints您感兴趣的等级的用户的点数.
响应将类似于:
{
max_score: 0,
total: 2
}
Run Code Online (Sandbox Code Playgroud)
total 是具有相同或更多点数的用户数 - 换句话说,就是用户的排名!
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |