0

私はスキーマを持っています。そして唯一の処方箋は、一意性の検証です。

User.path("email").validate(hasUnique("email"), "uniqueness");

hasUniquemongoose値の一意性を検証するために使用される関数を返します。

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 フィールドをクエリから除外できると考えています。

4

1 に答える 1