Я хочу обновить определенные поля в документе после изменения другого поля. У меня есть код продукта и несколько полей, таких как цена и название, которые я получаю из внешнего API.
Я хочу обновлять цену и название в документе всякий раз, когда кто-то изменяет код продукта в бэкэнде. Сначала я попытался использовать крючок для сохранения сообщений мангуста в схеме. Это привело к бесконечному циклу, поскольку он продолжал обновлять и, таким образом, сохранять документ после сохранения документа. Затем я реализовал логическое значение, чтобы хук сохранения записи вызывался только один раз, что выглядит примерно так:
let postSaveTriggered = false;
//update our product!
Product.schema.post('save', function(doc, next) {
if (!postSaveTriggered) {
postSaveTriggered = true;
api.product.updateInfo(doc, function() { //this updates the document
next();
});
} else {
postSaveTriggered = false;
next();
}
});
Но я хочу, чтобы эта функция срабатывала только тогда, когда пользователь фактически меняет код продукта, а не когда продукт обновляется в целом. Я также запускаю задание cron для обновления цен на продукты, и я, очевидно, не хочу, чтобы в этом сценарии вообще срабатывал хук для сохранения сообщений. Есть ли способ добиться того, чего я хочу, используя бэкэнд KeystoneJS?