我写了一个云作业,在用户对象中插入用户的名字和姓氏的小写版本,以便我可以从我的客户端应用程序执行搜索。解析后台作业each()不会遍历所有记录?
当我在一个有40个用户的开发者解析应用上运行这个工作时,它工作得很好。
当我在我的生产应用程序上运行此操作时,它并没有更新我所有的记录。我目前所面对的几十万用户,我期待这个云的工作按如下说明采取一切他们的照顾:
http://blog.parse.com/2013/05/13/launch-and-iterate-parse-data-migrations/
“上Parse.Query对象的新每种方法可以让你做到这一点,即使你在一个集合中有数以万计的对象或更多的对象,它也会返回它们中的每一个,给你一个机会来修改它们,只要你认为合适。“
那么我的问题是为什么这个函数会留下超过一半的数据库?它只适用于一群用户,可能有几百个。
如何使这个函数影响我的用户表中的整数据集?
Parse.Cloud.job("migration1", function(request, status) {
// Set up to modify user data
Parse.Cloud.useMasterKey();
// Query for all users
var query = new Parse.Query(Parse.User);
query.each(function(user) {
// Set and save the change
var firstname = user.get("firstname");
if(firstname) {
user.set("searchfirstname", firstname.toLowerCase());
} else {
user.set("searchfirstname", "");
}
var lastname = user.get("lastname");
if(lastname) {
user.set("searchlastname", lastname.toLowerCase());
} else {
user.set("searchlastname", "");
}
return user.save();
}).then(function() {
// Set the job's success status
status.success("search migration completed successfully.");
}, function(error) {
// Set the job's error status
status.error("Uh oh, something went wrong with search migration");
});
});
编辑: 好了,所以当我看到错误日志中我看到这一点:
E2014-10-18T15:48:49.984Z] v63: Ran job searchMigration with:
Input: {}
Failed with: TypeError: Cannot call method 'toLowerCase' of undefined
我试图以任何方式我能想到的检查不确定的,我仍然得到了同样的问题。 我试图检查未定义的是这样的:
if(lastname === undefined || lastname === void 0 || typeof lastname == 'undefined') ...
我还是得到了一个未定义的错误的结果与toLowerCase,我认为这就是为什么工作不影响我的所有用户表,因为它停止...
有什么建议吗?