[英]Mongoose validate array of subdocuments
我有以下架構
const TextSchema = new Schema({
locale: String,
contexts: [{
field: String,
channel: String,
}],
});
我想為每個上下文添加一個驗證,以確保設置了字段或通道。
我嘗試將上下文提取到單獨的模式並設置如下驗證,但它只驗證整個數組而不是每個上下文。
const TextSchema = new Schema({
locale: String,
contexts: {
type: [ContextSchema],
validate: validateContext,
},
});
我相信您不能為數組中正確類型的對象定義驗證器,而只能在字段上定義。 如果有辦法按預期執行此操作,我很樂意收回我的答案!
然而:
你可以在一個字段上定義一個驗證器並像這樣訪問它所在的對象:
const validator = function(theField) {
console.log('The array field', theField);
console.log('The array object', this);
return true;
};
const TextSchema = new Schema({
locale: String,
contexts: [{
field: {
type: String,
validate: validator
},
channel: {
type: String,
validate: validator,
},
}],
});
打印類似的東西
The array field FIELDVALUE
The array object { _id: 5c34a4172a0f34220d17fc1f, field: '21', channel: '2123' }
這樣做的缺點是驗證器在數組中的每個字段上運行。 如果您只同時設置它們,則只能為一個字段設置。
或者:如果您不需要定義數組中對象的類型,您只需將數組對象的類型設置為 Mixed 並在此字段上定義一個驗證器。
const TextSchema = new Schema({
locale: String,
contexts: [{
type: mongoose.SchemaTypes.Mixed,
validate : function (val) {
console.log(val);
return true;
},
}],
});
也應該打印
{ _id: 5c34a4172a0f34220d17fc1f, field: '21', channel: '2123' }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.