Итак, у меня есть следующая схема:
const VideoSchema = mongoose.Schema({
youtube: {
type: String,
index: {
unique: true,
partialFilterExpression: { youtube: { $type: 'string' } }
},
validate: {
validator: (v) => /^[a-zA-Z0-9-_]{11}$/.test(v) || v == null,
message: "Youtube ID doesn't match pattern"
}
}
})
И это работает нормально.У меня могут быть нулевые значения и строковые значения, которые являются уникальными.
Затем я реализовал библиотеку: mongoose-unique-validator
Я реализовал это, потому чтоМне нужны пользовательские ошибки для уникальных значений, а ошибки mongodb просто не читаются.
VideoSchema.plugin(uniqueValidator, {
message: ({ path, value }) => {
if (path == 'youtube') return 'Youtube ID already exists.'
}
})
VideoSchema.post('save', async function (err, doc, next) {
const error = [];
if (err.name == 'ValidationError') {
for (const a in err.errors) error.push(err.errors[a].message)
return next(error)
}
else return next(err)
})
Но после этого нулевые значения больше не рассматриваются как partIndex, вместо этого он сообщает 'Идентификатор Youtube уже существует.' и проверяемое значение было нулевым.
Как я могу пропустить нулевые значения или реализовать пользовательские сообщения другим способом?