2015-09-24 2 views
0

У меня есть 2 PFObjects - игрок, скажем так, и PlayerStats. Есть также несколько других PFObject, связанных с PFPlayer.Закажите результаты ParseQuery по значению в includeKey class

Я хочу перечислить игроков с самыми высокими показателями. Счет содержится в 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

Желаем, но нет, не поддерживается. Единственный подход - сортировать результат. По крайней мере 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"); 
    }); 
}); 

EDIT - я должен был упомянуть изначально: если PlayerStat имеет указатель на игрока (что было бы разумно), то вы можете сделать запрос на статистику для такие вещи, как высокий балл за все время ...

PFQuery *andQuery = [PFQuery queryWithClassName:@"PlayerStat"]; 
[andQuery includeKey:@"user"]; 
[andQuery descending:@"score"]; 

И по крайней мере, точечная нотация работает для суб-подчиненный ключей (3 глубока макс) ...

[andQuery includeKey:@"user.somePointerOnUser"]; 

Как и во всех запросах, они ограничены максимальным количеством 1000.

+0

Большая сортировка, но все же ограничена 1000 результатами PFQuery. Полагаю, по крайней мере эти 1000 будут самыми последними обновлениями ... – Smikey

+0

Да. См. Править. В качестве альтернативы рассмотрите возможность использования указателя назад для пользователя из других классов. – danh

0

Вы объявили statsQuery и использовать miniStatsQuery.

Почему бы не сохранить указатель игрока на каждом объекте PlayerStats, а затем вы можете запросить отсортированные элементы PlayerStats и включить ключ Player?

+0

Ах исправлено это - была опечатка, так как не копировала пасту напрямую. Я могу это сделать, однако мне все равно придется запускать второй запрос в объектах Player, так как они включают в себя больше PFObject, которые мне нужны ... – Smikey

Смежные вопросы