一劳永逸地防止 Parse Server 中的重复的最终方法

xyb*_*rek 2 node.js parse-platform parse-server

我们现在使用 parse-server 面临的最大问题之一是重复。尽管我们已经实现了 Parse 云代码来防止此类事件通过beforeSaveafterSave同时添加了外部中间件以在保存之前检查现有对象,但我们仍然面临着重复,特别是在并发操作上。

这是我们防止特定类重复的代码:

Parse.Cloud.beforeSave("Category", function(request, response) {
    var newCategory = request.object;
    var name = newCategory.get("name");
    var query = new Parse.Query("Category");
    query.equalTo("name", name);
    query.first({
        success: function(results) {
            if(results) {
                if (!request.object.isNew()) { // allow updates
                    response.success();
                } else {
                    response.error({errorCode:400,errorMsg:"Category already exist"});
                }
            } else {
                response.success();
            }
        },
        error: function(error) {
            response.success();
        }
    });
});
Parse.Cloud.afterSave("Category", function(request) {
    var query = new Parse.Query("Category");
    query.equalTo("name", request.object.get("name"));
    query.ascending("createdAt");
    query.find({
        success:function(results) {
            if (results && results.length > 1) {
                for(var i = (results.length - 1); i > 0 ; i--) {
                    results[i].destroy();
                }
            }
            else {
                // No duplicates
            }
        },
        error:function(error) {
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

上面的代码能够防止一些重复,但大多数仍然通过,例如:

在此处输入图片说明

防止与 Parse 服务器重复的“最终方法”是什么?

flo*_*art 7

您始终可以在 mongodb 中为文档中应该唯一的字段创建唯一索引。

这样任何与该索引冲突的保存都将被中止