Подтвердить что ты не робот

Синтаксис реляционного запроса Parse Cloud Code

У меня есть функция облака на Parse. Когда он вызывает это, получает PFObject, затем добавляет связь между этим объектом и пользователем. Эта часть отлично работает (видна в конце функции). У меня возникли проблемы с получением запроса, который выбирает PFObject, чтобы игнорировать те, которые пользователь уже связан с

Вот мой код:

Parse.Cloud.define("NextMedia", function (request, response) {

    var LikeRequest = Parse.Object.extend("LikeRequest");
    var query = new Parse.Query(LikeRequest);

    query.equalTo("completed", false);
    console.log("user: " + Parse.User.current().id);

    query.notEqualTo("user", Parse.User.current());

    // Also only fetch if never been sent before 
    // HERE SHOULD USE THE BELOW RELATIONSHIP
    var innerQuery = new Parse.Query(Parse.User);
    innerQuery.exists(Parse.User);
    query.matchesQuery("sentTo", innerQuery);

    query.ascending("createdAt");

    query.first({

        success: function (object) {
            // Successfully retrieved the object.
            console.log("Got 1 object: " + object.get('mediaId'));

            // Record that the user has been sent it
            var user = Parse.User.current();
            var relation = object.relation("sentTo"); // RELATION ADDED HERE

            relation.add(user);
            object.save();

            response.success(object);
        },
        error: function (error) {
            console.log("Error: " + error.code + " " + error.message);

            response.error("Error getting next mediaId");
        }
    });
});

Я уверен, что просто не понимаю, как работает синтаксис запроса отношения.

4b9b3361

Ответ 1

Это растяжение:

// Also only fetch if never been sent before 
// HERE SHOULD USE THE BELOW RELATIONSHIP
var innerQuery = new Parse.Query(Parse.User);
innerQuery.exists(Parse.User);
query.matchesQuery("sentTo", innerQuery);

Может быть изменено на:

// Also only fetch if never been sent before 
query.notContainedIn("sentTo",[Parse.User.current()])

Это работает. Запрос на анализ

Ответ 2

как насчет Ограничения запросов?

Если вы хотите получить объекты, которые не соответствуют ни одному из нескольких значений, вы можете использовать notContainedIn

  // Finds objects from anyone who is neither Jonathan, Dario, nor Shawn
query.notContainedIn("playerName",
                     ["Jonathan Walsh", "Dario Wunsch", "Shawn Simon"]);

Ответ 3

Я думаю, что Kerem частично исправляет его, но notContained in недостаточно динамичен для вашего дела.

Вам нужно построить запрос из отношения, а затем использовать doesNotMatchKeyInQuery, чтобы исключить эти объекты из внешнего запроса.