我正在使用featherJs 和貓鼬。我有一個帶有列舉的架構,我想要 $inc。
new Schema({
status: { type: Number, enum: [0, 1, 2, 3], default: 0 },
});
但是當我 $inc 'status' 欄位時,它并不關心列舉,我可以根據需要多次 $inc 并獲得 100000 的狀態。
不知道是因為featherjs還是別的什么
謝謝
uj5u.com熱心網友回復:
如檔案中所述,這是“按預期作業”:
enum:陣列,創建一個驗證器,檢查值是否嚴格等于給定陣列中的值之一。
所以enum只需創建一個mongoose驗證器,即:
驗證是中間件。默認情況下,Mongoose 將驗證注冊為每個模式的 pre('save') 掛鉤。
理論上你應該為此使用他們的更新驗證器,但是$inc他們不支持,此外他們的行為有時也不是很清楚。
我個人建議根本不要使用mongoose,它是一個只會增加錯誤和混亂的黑匣子。特別是當涉及到不是“真正的”驗證者的“驗證者”時。
那么你能做些什么來解決這個問題呢?
最簡單的解決方案是在代碼中執行它,首先找到物件,如果它符合標準,然后再執行
$inc,顯然這不會提供實際驗證,并且僅在您實作它的地方受支持,如果您在其中有很多地方可能發生此類更新的代碼也不是最佳的。使用 mongodb驗證,這是在資料庫級別實際驗證的“真實”驗證。例如,您可以創建您的收藏:
db.createCollection('collection_name', {
validator: {
$jsonSchema: {
bsonType: 'object',
properties: {
status: {
bsonType: 'int',
enum: [0, 1, 2, 3],
description: 'must be a valid status integer',
},
},
},
},
validationAction: 'error',
});
現在任何沒有有效值的更新都會失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/440282.html
