有没有办法在mongoose验证期间引用当前模型的_id字段?

时间:2013-07-06 22:00:42

标签: javascript validation mongoose unique

我有一个架构。唯一的处方是唯一性验证。

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谓词来排除查询中当前doc的_id字段。

1 个答案:

答案 0 :(得分:1)

在Mongoose验证函数中,this是要验证的文档。

所以你可以这样做:

function hasUnique(key) {
  return function(value, respond) {
    var query = { _id: { $ne: this._id }};
    query[key] = /A regex used to look up the email/;

    User.findOne(query, function(err, user) {
      respond(!user);
    }
  }
}