私はスキーマを持っています。そして唯一の処方箋は、一意性の検証です。
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 フィールドをクエリから除外できると考えています。