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