我有一个架构。而唯一的处方,是唯一性验证。
User.path("email").validate(hasUnique("email"), "uniqueness");
hasUnique
返回将用于mongoose
验证值的唯一性的函数。
function hasUnique(key) {
return function(value, respond) {
var query = {};
query[key] = /A regex used to look up the email/;
User.findOne(query, function(err, user) {
respond(!user);
}
}
}
这在创建新文档时效果很好。但是当我查询一个文档,改变一个属性然后调用save
时,这个验证被调用并且失败,因为它在集合中看到了它自己的电子邮件并且认为这不是唯一的。
有没有办法可以在从返回的验证函数中排除文档本身hasUnique
?我的想法是我可以添加一个 $not 谓词来排除查询中当前文档的 _id 字段。