Правильно ли я делаю это в 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
        });
      }
    };

enter image description here

0
edelcodes 31 Июл 2020 в 01:09

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();
0
ippi 31 Июл 2020 в 05:19