在Parse中一次更新多个对象

Update many objects at once in Parse

本文关键字:更新 一次 对象 Parse      更新时间:2023-09-26

我需要一次更新一堆对象,而且由于文档建议调用.getObjectInBackgroundWithID,我找不到一种有效的方法来一次完成所有操作。我没有给每个对象都设置ID,即使我有,我也不能把它们都传递进去。

问题:1)在云代码中调用这个函数比在客户端处理这些更有意义,对吗?2)在JS(云代码)/Swift的for循环中更新具有相同值的许多对象的最佳方法是什么?

我认为您正在寻找.findObjects(及其变体)的查询,然后使用PFObject的类方法.saveAll(及其变体)来保存对象数组。

下面是一个示例:

var query = PFQuery(className:"GameScore")
query.whereKey("playerName", equalTo:"Sean Plott")
query.findObjectsInBackgroundWithBlock {
  (objects: [AnyObject]?, error: NSError?) -> Void in
  if error == nil {
    // The find succeeded.
    println("Successfully retrieved '(objects!.count) scores.")
    // Do something with the found objects
    if let objects = objects as? [PFObject] {
      for object in objects {
        println(object.objectId)
        // Do your manipulation
      }
      // Save your changes to ALL objects
      PFObject.saveAllInBackground(objects, block: {
        (succeeded: Bool, error: NSError!) -> Void in
        if (error == nil) {
            println("Successfully saved '(objects!.count) objects.")
        } else {
            // Log details of the failure
            println("Error: '(error!) '(error!.userInfo!)")
      })
    }
  } else {
    // Log details of the failure
    println("Error: '(error!) '(error!.userInfo!)")
  }
}

CloudCode示例:

var GameScore = Parse.Object.extend("GameScore");
var query = new Parse.Query(GameScore);
query.equalTo("playerName", "Dan Stemkoski");
query.find({
  success: function(results) {
    alert("Successfully retrieved " + results.length + " scores.");
    // Do something with the returned Parse.Object values
    for (var i = 0; i < results.length; i++) {
      var object = results[i];
      alert(object.id + ' - ' + object.get('playerName'));
    }
  },
  error: function(error) {
    alert("Error: " + error.code + " " + error.message);
  }
});