Использование триггера afterDelete для изменения большого количества пользователей

Когда определенный объект удаляется, мне нужно использовать триггер afterDelete для удаления ссылок на только что удаленный объект. В частности, в классе User есть столбец, который является указателем на объект только что удаленного типа. Поэтому мне нужно отключить этот столбец для пользователей, у которых был установлен только что удаленный объект. Для этого я запрашиваю пользователей, перебираю результаты запроса, unset определяю атрибут, а затем вызываю saveAll. Меня беспокоит то, что результаты запроса могут вернуть много пользователей, и мне нужно убедиться, что все они обновлены.

Мой вопрос: есть ли у триггеров Cloud Code максимальное ограничение в 1000 запросов? Есть ли лучший способ отключить этот указатель после удаления этого объекта? Нет ли автоматического удаления указателей на этот удаляемый объект?

Parse.Cloud.afterDelete("Book", function(request) {
    Parse.Cloud.useMasterKey();

    var book = request.object;

    var userQuery = new Parse.Query(Parse.User);
    userQuery.equalTo("Favorite_Book", book);
    userQuery.limit(1000);
    userQuery.find( {
        success:function(users){
            for (var i = 0; i < users.length; i++) {
                users[i].unset("Favorite_Book");
            }
            Parse.Object.saveAll(users, {
                success: function(users) {},
                error: function(users, error) {
                    console.error("Failed to update users: " + error.code + ": " + error.message);
                }
            });
        }, error: function(error) {
            console.error("Failed to fetch users: " + error.code + ": " + error.message);
        }
    });
});

person Jordan H    schedule 23.12.2015    source источник


Ответы (1)


В основном вам нужно знать две проблемы:

  1. Запрос Parse возвращает максимум 1000 записей. Чтобы обработать больше записей, вам необходимо разбить результаты на страницы с помощью метода skip в объекте запроса. Вы можете использовать Promises in Series для обработки всех ваших записей. партиями по 1000 записей.

  2. На бесплатном тарифе Parse вы можете делать только 1800 запросов в минуту. Это означает, что вы не можете сохранять/обновлять большое количество записей за короткий промежуток времени.

person Mo Nazemi    schedule 23.12.2015