【问题标题】:How to ensure unique key while using Parse database使用 Parse 数据库时如何确保唯一键
【发布时间】:2017-11-09 13:22:37
【问题描述】:
我需要唯一记录我的 Parse 对象,但由于“saveinbackground”,客户端上的简单 find() 无法完成这项工作。即使添加和设置像 bSavingInbackGround 这样的布尔值并跳过额外的保存(如果为 true)也不会阻止我的应用创建重复项。
确保唯一键在许多(多用户)情况下显然非常有用。
解析 CloudCode 是正确的方法,但我没有找到合适的解决方案。
【问题讨论】:
标签:
database
android-studio
parse-platform
unique-constraint
unique-key
【解决方案1】:
在进行了一些跟踪和错误测试后,我终于使用 Cloud Code 让它工作了。希望它可以帮助别人。
我的“表”是 myObjectClass,需要唯一的字段是“myKey”。
将此添加到 main.js 并上传到 Parse Server Cloud Code。
更改 myObjectClass 和 'myKey' 以满足您的需要:
Parse.Cloud.beforeSave("myObjectClass", function(request, response) {
var myObject = request.object;
if (myObject.isNew()){ // only check new records, else its a update
var query = new Parse.Query("myObjectClass");
query.equalTo("MyKey",myObject.get("myKey"));
query.count({
success:function(number){ //record found, don't save
//sResult = number;
if (number > 0 ){
response.error("Record already exists");
} else {
response.success();
}
},
error:function(error){ // no record found -> save
response.success();
}
})
} else {
response.success();
}
});
【解决方案2】:
您的方法是正确的方法,但从性能的角度来看,我认为使用query.first() 比query.count() 更快,因为query.first() 将在找到匹配记录后立即停止,而query.count() 将必须遍历整个班级记录才能返回匹配记录的数量,如果你有一个庞大的班级,这可能会很昂贵。