gpt4 book ai didi

swift - 在 Firebase 中按指定子项过滤和排序

转载 作者:行者123 更新时间:2023-11-28 08:01:41 24 4
gpt4 key购买 nike

我正在使用 Firebase 和 Swift 构建一个游戏应用,并像这样存储我的数据。

players: {
"category": {
"playerId": {
name: "Joe",
score: 3
}
}
}

我需要根据分数进行两个查询:

  • 从一个类别中选出前 5 名玩家。
  • 获取游戏总排名前 100 的玩家。

我在获取第一个查询的数据时没有问题,使用

 ref.child("players").child(category).queryOrdered(byChild: "score").queryLimited(toLast:5)

但是我无法理解第二个查询。我怎样才能有效地做到这一点?

最佳答案

您要么需要添加一个额外的数据结构以允许第二个查询(这在 NoSQL 数据库中很常见),要么更改您当前的结构以允许两个查询。

后者可以通过将数据转换为一个单一的平面列表来实现,并具有一些额外的合成属性。例如

players: {
"playerId": {
category: "category1"
name: "Joe",
score: 3,
category_score: "category1_3"
}
}

使用新的附加属性 categorycategory_score,您可以通过以下方式获得某个类别的得分最高者:

ref.child("players")
.queryOrdered(byChild: "category_score")
.queryStarting(atValue:"category1_")
.queryEnding(atValue("category1_~")
.queryLimited(toLast:5)

总分前 100 名:

ref.child("players")
.queryOrdered(byChild: "score")
.queryLimited(toLast:100)

有关这方面的更多信息,请在此处查看我的回答:Firebase 数据库查询只能对单个属性进行排序/过滤。在许多情况下,可以将要过滤的值组合到一个(合成的)属性中。有关此方法和其他方法的示例,请在此处查看我的回答:http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase .

关于swift - 在 Firebase 中按指定子项过滤和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46479911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com