parse.com存储一次特定值

时间:2014-09-07 15:33:00

标签: ios objective-c parse-platform pfobject

我是Parse api的新手,我正试图弄清楚如何执行以下操作:

我的应用程序存储字符串(“foo”,“bar”等)。 “foo”应该只存在一次,无论用户尝试添加多少次 - 以及尝试添加该字符串的次数。因此,如果四个用户尝试添加字符串“foo”,我希望关联的PFObject看起来像:

name: "foo"
count: 4

(不应该有多个名称为“foo”的对象)

我知道我可以查询“foo”,检索它,然后更新计数但是我觉得如果多个用户同时尝试更新“foo”,就会存在竞争条件。

通过Parse API实现这一目标的正确/最佳方式是什么(如果重要的话,我正在使用iOS)。

2 个答案:

答案 0 :(得分:1)

解析云代码beforeSavehttps://parse.com/docs/cloud_code_guide#functions-modifysave

在保存发生之前,检查行是否存在,然后更新它,然后返回response.error()

这样的事情:

Parse.Cloud.beforeSave("MyObject", function(request, response) {
  var newObject = request.object;
  if(!newObject.existed()) {
    var query = new Parse.Query("MyObject");
    var name = newObject.get("name");
    query.equalTo("name", name);
    query.first().then(function(existing){
      if(existing){
        existing.increment("count");
        return existing.save().then(function(){
          response.error(name + " already exists");
        });
      }
      else {
        response.success();
      }
    });
  }
  else {
    response.success();
  }
});

答案 1 :(得分:1)

Parse为您提供了incrementKey方法,可帮助您在多个用户尝试更新计数器时避免出现问题。如果需要,您还可以按给定数量递减或递增。他们称之为计数器。但这只能解决竞争条件问题。

[myString incrementKey:@"count"];
[myString saveInBackground];

您可以在此处找到更多信息:https://www.parse.com/docs/ios_guide#objects-updating/iOS