我一直在嘗試運行自定義驗證程序以檢查用戶輸入的名稱是否已存在於數據庫中。因爲,mongoDb將大寫和小寫名稱視爲不同,我爲它創建了自己的驗證器。在貓鼬更新查詢中運行自定義驗證
function uniqueFieldInsensitive (modelName, field){
return function(val, cb){
if(val && val.length){ // if string not empty/null
var query = mongoose.models[modelName]
.where(field, new RegExp('^'+val+'$', 'i')); // lookup the collection for somthing that looks like this field
if(!this.isNew){ // if update, make sure we are not colliding with itself
query = query.where('_id').ne(this._id)
}
query.count(function(err,n){
// false when validation fails
cb(n < 1)
})
} else { // raise error of unique if empty // may be confusing, but is rightful
cb(false)
}
}
}
現在的問題是,驗證,同時節省在DB文件運行,但不能同時更新。
因爲我使用貓鼬版本4.x,我也試過在我的更新查詢中使用{ runValidators: true }
。這不起作用,因爲我的驗證器中的'this'關鍵字是'null',而在更新的情況下,它指的是在保存的情況下更新的文檔。
能否讓我知道是否有一些我錯過了或有任何其他方式,我可以在更新查詢中運行自定義驗證器。