Я считаю, что вы не можете определить валидатор для правильно типизированного объекта в массиве, но только для полей. Если есть способ сделать это, как ожидалось, я был бы рад отозвать мой ответ!
Тем не менее:
Вы МОЖЕТЕ определить валидатор для поля и получить доступ к объекту, в котором он находился, следующим образом:
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' }