Есть хук, который создает slug из тайтла
articleSchema.pre('save', async function(next) {
if(!this.isModified('title')) {
next()
return
}
this.slug = slug(this.title)
const slugRegEx = new RegExp(`^(${this.slug})((-[0-9]*$)?)$`, 'i')
const articlesWithSlug = await this.constructor.find({slug: slugRegEx})
if(articlesWithSlug.length) {
this.slug = `${this.slug}-${articlesWithSlug.length + 1}`
}
next()
})
Все работает как положено при первоначальном сохраниении, но если я изменяют тайтл, то slug не меняется. Почему? Как исправить?
UPD:
Нашел, что можно использовать хук на
findOneAndUpdate
(я его использую для обновления). Но все равно не работает. Проблема с
this.isModified
. Судя по всему, в хук для
findOneAndUpdate
возращаются другие данные нежели в
save
. Блин с этим МОнгузом больше проблем чем помощи! Разбираться в этих дебрях API, недокументированном постоянно меняющемся. Дерьмо конченное!