Правильно ли я делаю это в backend API? Как бы вы удалили объект внутри массива в родительском массиве в бэкэнде? Сначала я нашел индекс основного родительского массива, а затем я нашел объект из массива задач, используя .tasks [index]. Вопрос в том, как мне удалить это в узле? В учебных пособиях, которые я нашел, для удаления элемента используется req.params.id, но мой более сложный.
exports.deleteTaskItem = async (req, res) => {
const taskindex = req.params.id;
const index = req.params.index;
try {
const taskfound = await Task.findById(taskindex);
const taskfounditem = await taskfound.tasks[index];
//code to type here
res.status(204).json({
status: "success",
data: null
});
} catch (err) {
res.status(404).json({
status: "fail",
message: err
});
}
};
1 ответ
Я считаю, что эта часть документации вас заинтересует: https://docs.mongodb.com/manual/reference/operator/update -array /
И чтобы уточнить, я полагаю, вы хотите использовать оператор $ pull.
Что-то вроде этого:
const {id, index} = req.params;
await Task.findByIdAndUpdate(id,{
$pull: {
tasks: { _id: index }
}
});
(Отказ от ответственности: на этот раз я не проверял это, извините. Но это должно быть близко.)
Edit: Теперь, когда я перечитываю вопрос, я замечаю, что вы хотите использовать index. Лично я думаю, что было бы проще просто добавить идентификаторы, поскольку вы получаете это автоматически, если используете субдокумент. Но если вы настаиваете на использовании индекса, возможно, вам поможет этот ответ:
https://stackoverflow.com/a/4970050/1497533
Изменить еще раз: похоже, это помогло получить рабочее решение, поэтому я скопирую его из комментариев:
taskfound.tasks.splice(taskindex, 1);
taskfound.markModified('tasks');
await taskfound.save();
Похожие вопросы
Связанные вопросы
Новые вопросы
node.js
Node.js — это основанная на событиях, неблокирующая, асинхронная среда выполнения ввода-вывода, использующая движок Google V8 JavaScript и библиотеку libuv. Он используется для разработки приложений, которые интенсивно используют возможность запуска JavaScript как на стороне клиента, так и на стороне сервера и, следовательно, выигрывают от возможности повторного использования кода и отсутствия переключения контекста.