2013-07-06 23 views
0

我有一個架構。唯一的處方是唯一性驗證。在貓鼬驗證過程中有沒有辦法引用當前模型的_id字段?

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字段。

回答

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); 
    } 
    } 
} 
+0

事後看來,這太明顯了笑。 – veidt

相關問題