我有2个PFObjects - 玩家可以说,还有PlayerStats。还有一些与PFPlayer相关的其他PFObject。
我想列出得分最高的玩家。得分包含在PlayerStats中。
现在我已经尝试过了:
PFQuery *andQuery = [PFQuery queryWithClassName:@"Player"];
[andQuery includeKey:@"playerStats"];
PFQuery *statsQuery = [PlayerStats query];
[statsQuery orderByDescending:@"score"];
[andQuery whereKey:@"miniStats" matchesQuery:statsQuery];
但是这似乎并不尊重返回统计信息的顺序。我真正想做的是通过其包含的类中的值来命令我的andQuery。
我尝试过运行基本查询并在之后对结果进行排序,但是我有超过999名玩家,这是PFQuery的限制,所以这并没有帮助。
我怀疑我必须按顺序执行2级PFQuery - 一个用于PlayerStats,然后根据该查询的结果,使用玩家的objectIds提交另一个查询来获取Player对象。但这似乎很麻烦,特别是如果我一次只搜索20个结果的话。
理想情况下会有:
[andQuery orderByDescending:@"playerStats.score"];
答案 0 :(得分:0)
您声明了statsQuery并使用了miniStatsQuery。
为什么不在每个PlayerStats对象上存储一个Player指针,然后你可以查询已排序的PlayerStats并包含Player键?
答案 1 :(得分:0)
我们希望,但不,不支持。唯一的方法是对结果进行排序。至少underscorejs简洁明了......
var _ = require('underscore');
PFQuery *andQuery = [PFQuery queryWithClassName:@"Player"];
[andQuery includeKey:@"playerStats"];
andQuery.find().then(function(players) {
players = _.sortBy(players, function(player) {
return player.get("playerStats").get("score");
});
});
编辑 - 我最初应该提到:如果PlayerStat有一个指向播放器的指针(这是明智的),那么你可以对统计数据进行查询,例如历史最高分。 ..
PFQuery *andQuery = [PFQuery queryWithClassName:@"PlayerStat"];
[andQuery includeKey:@"user"];
[andQuery descending:@"score"];
至少点符号适用于次级键(3个深度是最大值)......
[andQuery includeKey:@"user.somePointerOnUser"];
与所有查询一样,这些查询限制为最多1000个。