2016-07-15 158 views
1

我已經建立了這樣的模式如何驗證類型和值。貓鼬,當更新/ findOneAndUpdate

它工作正常的創作。如果缺少必需或錯誤的類型,它會引發驗證錯誤。因此,將檢查這兩個類型和值(如果我增加額外的驗證函數來驗證每個字段中的值)

然而,當我嘗試更新或findOneAndUpdate。我已經將runValidators設置爲true。它以某種方式工作,但它只會驗證是否需要丟失。但它沒有驗證類型,可能會自動將我的類型轉換爲格式。

e.g如果我設置isAction(希望是布爾值)爲整數時,它會自動轉換成布爾值false。所以它有點繞過了類型驗證。然後它將進入已經布爾的驗證器功能,但我希望它應該在輸入驗證函數之前拋出驗證錯誤。

另一個問題是數組和對象。它沒有驗證對象中深度屬性的類型,並直接進入驗證函數。

所以我想看看是否有更好的方式來驗證這兩種類型和值正確時更新/ findOneAndUpdate。

我已經搜索了一些貓鼬驗證模塊,但其中大多數都是幫助每個字段的驗證功能。所以這些數據已經從整數轉換爲布爾值,並且當時無法檢查類型。

此時,我只能想到在插入/更新到貓鼬之前驗證類型和值。

const schema = new mongoose.Schema({{ 
 
    id: { 
 
     type: String, 
 
     unique: true, 
 
     required: true, 
 
    }, 
 
    address: { 
 
     formatted: String, 
 
     streetAddress: String, 
 
     locality: String, 
 
     region: String, 
 
     postalCode: String, 
 
     country: String, 
 
    }, 
 
    isActive: Boolean, 
 
    }); 
 

 
const user = mongoose.model('User', schema); 
 

 
// this one work with the validation on the type 
 
User.create({ id : 'userA' }, (err) => { 
 
    console.log(err); 
 
}); 
 

 
// fail to validate the type on both findOneAndUpdate 
 
User.update({ id:'userA'},{ $set: { address:12313 }}, { runValidators: true}, (err) => { 
 
    console.log(err); 
 
});

回答

0

本文https://www.mongodb.com/blog/post/introducing-version-40-mongoose-nodejs-odm約貓鼬驗證詳細討論。

不看請在部分前置和後置掛鉤查詢,其中列出了貓鼬4功能前置和後置掛鉤計數(),發現(),findOne(),findOneAndUpdate(),和update() 。

希望它幫助!

+0

但是,前,後鉤的上下文是模型本身。即使我們可以得到查詢,但我需要手動檢查和驗證數據類型,我希望貓鼬根據模式定義的數據類型自動執行,並像創建一個新數據類型一樣行爲。 如果是這樣,爲什麼不手動更新數據之前自己執行驗證。 順便說一句,感謝您的幫助。 –