2017-08-23 71 views

回答

0

嗯。代碼看起來不錯,但嘗試刪除$set運算符。更新模型時默認情況下已啓用。

另外你正在更新Array,這可能會導致一些麻煩。嘗試使用markModified標誌。

+0

我已經試過了,但它仍然沒有驗證:( –

+0

嗯,我可以建議你嘗試從文檔端運行驗證程序,這應該在100%的情況下運行 – BadVolt

+0

你能發佈這段代碼嗎?我不確定關於這個,下面是我試過'ContactSchema.path('first_name.0.value')。validate(function ...)'的代碼,但是當我驗證多字段時,它不能正常工作 –

0

如果您在驗證之前插入了一些不符合驗證規則的條目,Mongoose驗證有時會失敗。刪除這些條目貓鼬驗證後仍然無法正常工作。

我會建議你只刪除你的數據庫,然後再試一次。它幫助我在大多數時候。

0

這個問題的很多解決方案 答:在兩步中做同樣的事情。

  1. 使用findOne()方法查找結果。
  2. 使用Model.save()添加字段並保存文檔。

B.使用預更新鉤

Schema.pre('update', function(next) { 
// ps: pre-reserve this good practices 
var self = this; 
// self refer to calling model. you got self.first_name with modified value, also allow self.modelMethod 
// apply validation and go next  
    next(); 
}); 

C.貓鼬4.0更新

作爲評價和victorkohl的回答指出,貓鼬現在支持$設置字段和$的驗證如果在更新調用中包含runValidators:true選項,則會取消設置的運算符。