删除特定对象时,我需要使用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);
}
});
});
答案 0 :(得分:0)
您需要知道的主要有两个问题:
解析查询最多只返回1000条记录。要处理更多记录,您需要在查询对象上使用skip
方法对结果进行分页。您可以使用Promises in Series批量处理1000条记录中的所有记录。
在解析免费计划中,您每分钟只能发出1800个请求。这意味着您无法在短时间内保存/更新大量记录。