Parse platform Parse.com-修改后台作业中的所有用户。each()不';无法处理订单,.find()完成得太快
我试图获取所有用户数据,并按年龄降序排序,然后修改每个人的年龄。但是当我使用Parse platform Parse.com-修改后台作业中的所有用户。each()不';无法处理订单,.find()完成得太快,parse-platform,Parse Platform,我试图获取所有用户数据,并按年龄降序排序,然后修改每个人的年龄。但是当我使用query.find()时,它完成得太快了。只有年龄最大的2或3名用户才能正确保存。然后我尝试使用query.each(),但它不能按降序工作 下面是我使用query.each()时的代码,如果我不对它们进行排序,它将正确保存所有用户,但我需要对它们进行排序,并根据顺序更改它们的年龄 Parse.Cloud.job("ChangeUserAge", function(request, status) { Pars
query.find()
时,它完成得太快了。只有年龄最大的2或3名用户才能正确保存。然后我尝试使用query.each()
,但它不能按降序工作
下面是我使用query.each()时的代码,如果我不对它们进行排序,它将正确保存所有用户,但我需要对它们进行排序,并根据顺序更改它们的年龄
Parse.Cloud.job("ChangeUserAge", function(request, status) {
Parse.Cloud.useMasterKey();
var counter = 0;
var query = new Parse.Query(Parse.User);
query.descending("age, name");
query.each(function(user) {
counter += 1;
user.set("age", counter);
return user.save();
}).then(function() {
// Set the job's success status
status.success("ChangeUserAge completed successfully.");
}, function(error) {
// Set the job's error status
status.error("ChangeUserAge went wrong.");
});
});
下面是我使用query.find()时的代码,问题是完成得太快。只有2或3个用户正确保存
Parse.Cloud.job("RankingAllUserBasedOnDiamonds", function(request, status) {
Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.User);
query.descending("age, name");
query.find().then(function(results) {
for(var i = 0; i < users.length; i++)
{
var user = users[i];
user.set("age", i+1);
user.save();
}
}).then(function() {
// Set the job's success status
status.success("ChangeUserAge completed successfully.");
}, function(error) {
// Set the job's error status
status.error("ChangeUserAge went wrong.");
});
});
Parse.Cloud.job(“RankingAllUserBasedOnDiamonds”,函数(请求,状态){
Parse.Cloud.useMasterKey();
var query=newparse.query(Parse.User);
查询。递减(“年龄、姓名”);
query.find().then(函数(结果){
对于(var i=0;i
假设用户少于1000人,您可以使用承诺等待用户完成保存后再结束作业:
query.find().then(function(results) {
var promises = [];
for(var i = 0; i < users.length; i++)
{
var user = users[i];
user.set("age", i+1);
promises.push(user.save());
}
return Parse.Promise.when(promises);
}).then(function() {
// Set the job's success status
status.success("ChangeUserAge completed successfully.");
}, function(error) {
// Set the job's error status
status.error("ChangeUserAge went wrong.");
});
query.find().then(函数(结果){
var承诺=[];
对于(var i=0;i
经过几个小时的研究和测试。最后找到一种方法来更新.find()中的所有对象。它是Parse.Object.saveAll
。我将需要更新的所有对象推送到一个数组中,然后用一个success和error块调用saveAll
但正如Fosco所说,只返回了前1000条记录,所以我已经使用start index参数手动运行了几次后台作业
这是我的密码:
Parse.Cloud.job("RankingAllUserBasedOnDiamonds", function(request, status) {
Parse.Cloud.useMasterKey();
var usersToSave= [];
var query = new Parse.Query(Parse.User);
query.descending("age, name");
query.find().then(function(results) {
for(var i = 0; i < users.length; i++)
{
var user = users[i];
user.set("age", i+1);
usersToSave.push(user);
}
}).then(function() {
Parse.Object.saveAll(usersToSave, {
success: function(list) {
// All the objects were saved.
if (status) {
status.success("Update completed successfully.");
};
console.log("saveInBackground success");
}, error: function(model, error) {
// An error occurred while saving one of the objects.
if (status) {
status.error(error);
};
console.log("saveInBackground error: " + error.message);
});
}, function(error) {
// Set the job's error status
status.error("ChangeUserAge went wrong.");
});
});
Parse.Cloud.job(“RankingAllUserBasedOnDiamonds”,函数(请求,状态){
Parse.Cloud.useMasterKey();
var usersToSave=[];
var query=newparse.query(Parse.User);
查询。递减(“年龄、姓名”);
query.find().then(函数(结果){
对于(var i=0;i
希望这能帮助有同样问题的人。如果订单很重要的话,这将很难做到。.一个查找只能返回1000条记录,而每个记录都不能进行排序。与您的查找相关的问题(如果<1000个对象总数)您需要将save返回的承诺放在一个数组中,然后返回。Hi@Fosco,如果我有1000条以上的记录,您知道怎么做吗?您可以设置query.limit(1000),然后使用query.skip(1000)执行额外的查询,最多10000条记录。除此之外,不支持跳过。