我是Parse api的新手,我正试图弄清楚如何执行以下操作:
我的应用程序存储字符串(“foo”,“bar”等)。 “foo”应该只存在一次,无论用户尝试添加多少次 - 以及尝试添加该字符串的次数。因此,如果四个用户尝试添加字符串“foo”,我希望关联的PFObject
看起来像:
name: "foo"
count: 4
(不应该有多个名称为“foo”的对象)
我知道我可以查询“foo”,检索它,然后更新计数但是我觉得如果多个用户同时尝试更新“foo”,就会存在竞争条件。
通过Parse API实现这一目标的正确/最佳方式是什么(如果重要的话,我正在使用iOS)。
答案 0 :(得分:1)
解析云代码beforeSave
。 https://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。