验证功能以确保在ouchdb中具有唯一字段

问题描述 投票:1回答:2

是否可以编写验证功能以确保新文档的字段是唯一的?

想象一下,我正在尝试编写一个验证功能,该功能不允许两个用户使用相同的电子邮件。每次创建新用户时,都会调用验证函数,验证函数可能看起来像这样:

function (newDoc, oldDoc) {
    //How do I get this array to contain the emails of all the users?
    var allEmail;

    if (allEmail.indexOf(newDoc.email) !== -1) {
        throw "This email adress is already taken";
    }
};

如何填充数组allEmail以包含用户的所有电子邮件?

是否可以在验证函数中调用视图?

validation couchdb
2个回答
2
投票

不可能。验证功能仅适用于更新的文档及其先前的版本,并且无法访问其他文档。唯一保证唯一的字段是文档_id。如果有可能且不会产生安全/隐私问题,请使用电子邮件作为doc _id以确保其唯一性。

否则,您必须先创建一个以目标字段为键的视图,并首先检查它的存在,然后才能在客户端上创建新文档。但是,当您从其他实例复制文档时,此逻辑很容易被破坏。


0
投票

如果应用程序处于脱机状态,上述建议的解决方案将如何反应。本地袋视图可以单独检查并返回袋结果。从另一端输入并更新到沙发数据库的相同值可能有很大变化。

您对此案有解决方法吗?

© www.soinside.com 2019 - 2024. All rights reserved.