使用afterDelete触发器修改了很多用户

时间:2015-12-23 01:21:54

标签: parse-platform triggers cloud-code

删除特定对象时,我需要使用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);
        }
    });
});

1 个答案:

答案 0 :(得分:0)

您需要知道的主要有两个问题:

  1. 解析查询最多只返回1000条记录。要处理更多记录,您需要在查询对象上使用skip方法对结果进行分页。您可以使用Promises in Series批量处理1000条记录中的所有记录。

  2. 在解析免费计划中,您每分钟只能发出1800个请求。这意味着您无法在短时间内保存/更新大量记录。