如何在 Firebase 中按降序排列数据 - Python

Posted

技术标签:

【中文标题】如何在 Firebase 中按降序排列数据 - Python【英文标题】:How to arrange data in descending order in Firebase - Python 【发布时间】:2020-12-07 11:42:03 【问题描述】:

我有一个 Python 游戏,它获取有关用户的信息,甚至存储积分。我想为它制作一个排行榜,所以我决定使用 Firebase 并将数据写入数据库。我只想根据限制在前 20 名排名中的点按降序排列数据,因为现在数据只是随机排列的。帮助将不胜感激。谢谢!

我的代码:

#Example Set
ref = db.reference('/')
ref.set(
    'Data':
        

        'user'+str(userCounter): 
            'Username':userid,
            "Points": highscore
            
        

    )

#Updating Data
if current_score > highscore:
    ref = db.reference('Data')
    emp_ref = ref.child('user'+str(id))

    emp_ref.update(
        "Points": current_score
        )

【问题讨论】:

请发布您到目前为止尝试过的内容并提供您的数据库类型和结构 是的,我已经更新了帖子 【参考方案1】:

使用以下查询检索点列表中的前 20 人。

data_ref = db.reference('data')
snapshot = data_ref.order_by_child('Points').limit_to_first(20).get()
for key in snapshot:
    print(key)

在docs的帮助下查询

【讨论】:

虽然我试过一次它说 - AttributeError:模块'firebase_admin.db'没有属性'collection'。有什么解决办法吗?? 此答案适用于 Cloud Firestore,而您正在使用实时数据库。虽然这两个数据库都是 Firebase 的一部分,但它们是完全独立的,一个的安全规则不适用于另一个。要修复错误,您必须为实时数据库设置规则。有关如何执行此操作的演练,请参阅***.com/a/52129163 @FrankvanPuffelen,请看我更新答案可能对你有帮助 @Ashish 现在它说:firebase_admin.exceptions.InvalidArgumentError:索引未定义,将路径“/Data”的“.indexOn”:“Points”添加到规则中。我什至在规则中添加了“.indexOn”:“Points”,但它似乎并没有改变任何东西 感谢 Ashish 的更新。我使用文档为你投票。我完全忘记了我们那里有 Python 示例。 ?【参考方案2】:

Firebase 实时数据库不支持降序。如果您想按降序显示数据库中的项目,您有两种选择:

    在显示结果之前在客户端反转结果。 在数据库中存储一个反转值,并在查询中使用它。因此,在您的情况下,这意味着您在数据库中添加一个 negativePoints 值并对其进行排序,但当然仍会在显示中使用现有的 points 属性。

另见:

Display posts in descending posted order How to get data from firebase in descending order of value? Firebase Data Desc Sorting in android firebase -> date order reverse

【讨论】:

但是当我更新数据时,更新后的数据会按顺序排在第一位……那么我该如何在客户端进行安排呢?

以上是关于如何在 Firebase 中按降序排列数据 - Python的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 按降序对数据进行排序。 (只排序了一半。)

如何从数据框中按降序获得前 n 家公司

如何在Ruby中按降序对数组进行排序

按降序过滤时向 Firebase 观察者添加新帖子

在django模板中按降序对相关项目进行排序

如何在php中按降序对数组进行排序?