是否可以编写验证功能以确保新文档的字段是唯一的?
想象一下,我正在尝试编写一个验证功能,该功能不允许两个用户使用相同的电子邮件。每次创建新用户时,都会调用验证函数,验证函数可能看起来像这样:
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
以包含用户的所有电子邮件?
是否可以在验证函数中调用视图?
不可能。验证功能仅适用于更新的文档及其先前的版本,并且无法访问其他文档。唯一保证唯一的字段是文档_id。如果有可能且不会产生安全/隐私问题,请使用电子邮件作为doc _id以确保其唯一性。
否则,您必须先创建一个以目标字段为键的视图,并首先检查它的存在,然后才能在客户端上创建新文档。但是,当您从其他实例复制文档时,此逻辑很容易被破坏。
如果应用程序处于脱机状态,上述建议的解决方案将如何反应。本地袋视图可以单独检查并返回袋结果。从另一端输入并更新到沙发数据库的相同值可能有很大变化。
您对此案有解决方法吗?