我创建了以下工作来清理不需要的记录。我已经简化了下面的代码来解决根本原因,但只有这一点,我运行它的80%以上由于错误代码1“内部错误”而无法找到任何内容:
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以更快地完成其余的记录吗?
答案 0 :(得分:0)
这是基于一个弱理论,即较小的限制将有所帮助(如果它确实是一个超时问题,希望它是每个查询超时而不是每个作业超时,否则这个想法根本没有帮助)。但是这里有一个想法如何使用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
});