按includeKey类中的值排序ParseQuery结果

时间:2015-09-24 16:35:36

标签: objective-c parse-platform pfquery pfobject

我有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"]; 

2 个答案:

答案 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个。