验证功能,以确保在couchdb中的唯一字段

时间:2014-08-26 15:40:19

标签: validation couchdb

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

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

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以包含用户的所有电子邮件?

是否可以在验证功能中调用视图?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

在这种情况下,您有解决方法吗?