Внесение изменений в таск
Научимся вносить изменения в задачи (таски) в MongoDB через n8n.
Схема сценария:

Принцип работы:
- Вебхук принимает запрос с id задачи и объектом с полями, которые нужно изменить.
- Находим задачу по id.
- Узел
Codeформирует новый объект задачи - Обновляем задачу в базе.
- Отвечаем на запрос.
Принимаем запрос
Метод: PATCH Production URL https://bogutski.up.railway.app/webhook/todo Test URL https://bogutski.up.railway.app/webhook-test/todo
Я отправил тестовый запрос в Postman:

Когда разрабатываете сценарий тестируйте каждый шаг и только потом переходите к следующему.
Находим задачу по id
Я использую такой подход, чтобы иметь возможность внести изменения на основе того что уже записано в документе и лучше контролировать процесс. В некоторых случая можно было бы применить операцию
Find And Update.

В поле Query я написал { "_id": "" }
Это запрос к базе с условием поиска и с шаблоном для подстановки значения.
Условия поиска – найти документ по полю _id.
Значение будет подставлено из селектора ``
Селектор указывает на то, что отдал предыдущий узел Webhook.
После обработки шаблона поле Query будет таким { "_id": "68afb40c10644334ee0f73d8" }.
Формируем новый объект задачи
В следующем узле Code я формирую новый объект задачи на основе того что уже есть в базе и того что пришло в запросе.

Вы можете использовать этот код в этот и подобных сценариях:
const taskFromDatabase = $('Get Task By Id').first().json;
const requestBody = $('Webhook Update Tasks').first().json.body;
const { title, complete } = requestBody;
const patch = {};
if (title) patch.title = title;
if (complete) patch.complete = (complete === true || complete === 'true');
return {
json: {
...taskFromDatabase,
...patch,
updatedAt: Date.now(),
}
};Этот код делает следующее:
- Получает объект задачи из базы данных, который вернул узел
Get Task By Id. - Получает тело запроса из узла
Webhook Update Tasks. - Извлекает поля
titleиcompleteиз тела запроса. - Создает пустой объект
patch, который будет содержать только те поля, которые нужно изменить. - Если в запросе есть поле
title, добавляет его в объектpatch. - Если в запросе есть поле
complete, преобразует его в булево значение и добавляет в объектpatch. - Возвращает новый объект задачи, объединяя существующий объект задачи из базы с объектом
patchи добавляя полеupdatedAtс текущим временем.
Обновляем задачу в базе
Update Key:_id – значит, что мы будем искать документ по полю _id, то есть по 68afb40c10644334ee0f73d8" Fields: title, complete, createdAt, updatedAt – поля, которые мы будем обновлять.

Подтверждение записи получаем в Output:
[
{
"title": "Learn N8N",
"complete": true,
"createdAt": 1756345356230,
"updatedAt": 1756838507388
}
]Отвечаем на Webhook
Просто передаем в ответ объект задачи, который вернул предыдущий узел.
