Простой способ получить несколько связанных объектов в Parse.com с помощью Javascript?

У меня есть класс Player. Игроки могут иметь x количество трофеев. У меня есть объект PlayerId и вам нужно получить список всех своих трофеев.

В браузере данных Parse.com объект Player имеет столбец с надписью:

trophies Relation<Trophy>
(view Relations)

Кажется, это должно быть так просто, но у меня проблемы с ним.

У меня есть плеер Player ParseObject:

var query = new Parse.Query("Trophy");
query.equalTo("trophies", player);
query.find({
  /throws an error- find field has invalid type array.

Я также пробовал реляционные запросы:

var relation = new Parse.Relation(player, "trophies");
relation.query().find({
  //also throws an error- something about a Substring being required.

Это должно быть полностью общей задачей, но я не могу понять, как это сделать.

Кто-нибудь знает, как это сделать в Javscript CloudCode?

Большое спасибо!

ИЗМЕНИТЬ -

Я могу делать реляционные запросы на пользователя в порядке:

var user = Parse.User.current();
var relation = user.relation("trophies");
relation.query().find({

Я не понимаю, почему этот же самый бит кода ломается, если я использую не-пользовательский объект.

Ответ 1

Я, наконец, разобрал это, хотя есть предостережение, которое делает эту работу иначе, чем указывает документация.

//Assuming we have 'player', an object of Class 'Player'.

var r = player.relation("trophies");
r.query().find({
  success: function(trophies){
    response.success(trophies); //list of trophies pointed to by that player "trophies" column.
  },
  error: function(error){
    response.error(error);
  }

})

Предостережение: У вас должен быть "полный" игровой объект в памяти, чтобы это работало. Вы не можете сохранить объект игрока, захватить объект из обратного вызова успеха и выполнить эту работу. По какой-то причине объект, возвращаемый в обработчик успеха, представляется неполным Parse.Object и не хватает некоторых методов, необходимых для этого.

Еще один камень преткновения о Parse.com Javascript SDK. Запрос, который ничего не находит, по-прежнему считается успешным. Поэтому каждый раз, когда вы запрашиваете что-то, вы должны проверить длину ответа на большее, чем 0, потому что успешный запрос ничего не мог вернуть.

Ответ 2

Это то, что сработало для меня:

        var Comment = Parse.Object.extend("Comment");
        var commentsQuery = new Parse.Query(Comment);
        commentsQuery.equalTo("parent", video);//for the given 'video' instance, find its children (comments)
        commentsQuery.descending("createdAt");
        return commentsQuery.find();

Примечание: конечно, video является экземпляром класса Video. И возврат find() означает, что мне придется обрабатывать "обещание" в любой функции, вызывающей эту функцию.

И вот другая функция, идущая под другим углом:

    getRecentCommentsOfAllVideos: function(limit) {
        var Comment = Parse.Object.extend("Comment");
        var commentsQuery = new Parse.Query(Comment);
        commentsQuery.descending("createdAt");
        commentsQuery.limit(limit);
        commentsQuery.include("parent");//this enables the details of the comment associated video to be available in the result
        return commentsQuery.find();
    }

(Обязательно прочитайте https://parse.com/docs/js_guide и найдите строку, в которой говорится: "Включите почтовые данные с каждым комментарием".)

Я также рассмотрел эти материалы; возможно, они вам помогут (хотя они мне не очень помогают):