尝试运行作业时解析错误代码 1 内部错误

Parse error code 1 internal error when attempting to run a job

我创建了以下作业来清除不需要的记录。我已经简化了下面的代码来解决根本原因,但仅此而已,超过 80% 的时间我运行它都找不到任何东西,因为错误代码 1 "internal error":

Parse.Cloud.job('cleanStories', function(request, status) {

  Parse.Cloud.useMasterKey();
  var counter = 0;

  var query = new Parse.Query('Story');
  query.doesNotExist("username");
  query.limit(1000);

  query.find({
    success: function(results) {
      counter += results.length;
      status.success(counter + " stories found.");
    },
    error: function(error) {
      status.error(counter + " stories found. Error: " + error.code + " " + error.message);
    }
  });
});

我目前有大约 568k 条记录。这比我开始运行此作业以清理记录时的近 800k 有所下降。它通常运行良好,但自从开始非常一致地出错。我做错了什么?

编辑:

我已经将限制降低到 50 并且执行成功率更高。在 100(默认值)时,它仍然经常失败。无论如何我可以把它恢复到 1000 以更快地完成其余记录吗?

这是基于一个较弱的理论,即较小的限制会有所帮助(如果它确实是超时问题,希望它是每个查询超时而不是每个作业超时,否则这个想法根本无济于事)。但是这里有一个想法如何使用 limit/skip:

进行大查找
function findN(query, results) {
    results = results || [];
    query.skip(results.length);
    return query.find().then(function(findResults) {
        results = results.concat(findResults);
        return (findResults.length === 0)? results : findN(query, results);
    });
}

// to run this, build a query 
var query = new Parse.Query("MyClass");
// qualify the query however you wish
// set any limit up to 1000, but our guess is that yours should be small
query.limit(20);
var results = [];
findN(query, results).then(function(r) {
    console.log("found " + r.length + " rows");
    // r will contain all of the rows matching the query, found 20 at a time
});