当前位置:  开发笔记 > 编程语言 > 正文

获取Firebase中有序列表中对象的索引

如何解决《获取Firebase中有序列表中对象的索引》经验,为你挑选了1个好方法。

我正在使用Firebase构建排行榜.使用Firebase的优先级系统跟踪玩家在排行榜中的位置.

在程序执行的某个时刻,我需要知道给定用户在排行榜中的位置.我可能有成千上万的用户,因此遍历所有用户以找到具有相同ID的对象(因此给我索引)实际上不是一个选项.

是否有更高效的方法来确定Firebase中有序列表中对象的索引?

编辑:我想弄清楚以下内容:

/
---- leaderboard
--------user4 {...}
--------user1 {...}
--------user3 {...} <- what is the index of user3, given a snapshot of user3?
--------...

Dany Joumaa.. 6

如果您正在处理数十或数百个元素并且不介意带宽受到打击,请参阅Kato答案.

如果您正在处理记录的原因,您需要遵循原则上在pperrin答案中概述的方法.以下答案详细说明.

第1步:设置Flashlight以使用ElasticSearch为您的排行榜编制索引

Flashlight是一个方便的节点脚本,可以将elasticsearch与Firebase数据同步.

了解如何在此处进行设置.

第2步:修改Flashlight以允许您将查询选项传递给ElasticSearch

在撰写本文时,Flashlight无法告诉ElasticSearch您只对匹配的文档数量感兴趣,而不是文档本身.

我已提交此pull请求,该请求使用简单的单行修复来添加此功能.如果在您阅读此答案时没有关闭,只需手动更改手电筒的副本/分支.

第3步:执行查询!

这是我通过Firebase发送的查询:

{
    index: 'firebase',
    type: 'allTime',
    query: {
        "filtered": {
            "query": {
                "match_all": {}
            },
            "filter": {
                "range": {
                    "points": {
                        "gte": minPoints
                    }
                }
            }
        }
    },
    options: {
        "search_type": "count"
    }
};

替换points为您的用户的字段跟踪点的名称,以及minPoints您感兴趣的等级的用户的点数.

响应将类似于:

{
    max_score: 0,
    total: 2
}

total 是具有相同或更多点数的用户数 - 换句话说,就是用户的排名!



1> Dany Joumaa..:

如果您正在处理数十或数百个元素并且不介意带宽受到打击,请参阅Kato答案.

如果您正在处理记录的原因,您需要遵循原则上在pperrin答案中概述的方法.以下答案详细说明.

第1步:设置Flashlight以使用ElasticSearch为您的排行榜编制索引

Flashlight是一个方便的节点脚本,可以将elasticsearch与Firebase数据同步.

了解如何在此处进行设置.

第2步:修改Flashlight以允许您将查询选项传递给ElasticSearch

在撰写本文时,Flashlight无法告诉ElasticSearch您只对匹配的文档数量感兴趣,而不是文档本身.

我已提交此pull请求,该请求使用简单的单行修复来添加此功能.如果在您阅读此答案时没有关闭,只需手动更改手电筒的副本/分支.

第3步:执行查询!

这是我通过Firebase发送的查询:

{
    index: 'firebase',
    type: 'allTime',
    query: {
        "filtered": {
            "query": {
                "match_all": {}
            },
            "filter": {
                "range": {
                    "points": {
                        "gte": minPoints
                    }
                }
            }
        }
    },
    options: {
        "search_type": "count"
    }
};

替换points为您的用户的字段跟踪点的名称,以及minPoints您感兴趣的等级的用户的点数.

响应将类似于:

{
    max_score: 0,
    total: 2
}

total 是具有相同或更多点数的用户数 - 换句话说,就是用户的排名!

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有