【问题标题】: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() 将必须遍历整个班级记录才能返回匹配记录的数量,如果你有一个庞大的班级,这可能会很昂贵。

      【讨论】:

        猜你喜欢
        • 2019-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-31
        • 2023-03-15
        相关资源
        最近更新 更多