使用forEach查找和更新不起作用

时间:2019-10-18 08:16:54

标签: node.js mongoose

每个项目都有许多任务。并且任务具有开始日期时间字段,由于某些原因它可能会延迟,因此特定项目的每个任务应延迟并更新给定的分钟数。我尝试了以下代码,但是请不要按照给定的延迟时间更新时间。

function delayAllTasks(req, res, next)
{
    const givenProjectId = req.body.project_id;
    var delays_by = req.body.delays_by;

    try
    {
        Task.find({ project_id: givenProjectId }).exec((err, tasks) => {
            tasks.forEach((eachTasks) => {                
                Task.update(   { project_id: givenProjectId }, //where query
                               { $set: { estimate_start_datetime: moment(eachTasks.estimate_start_datetime).add(delays_by, 'minutes') } } //what to be changed
                           ).then(function (updatedDelays)
                            {                                
                                return res.status(200).json("updated", updatedDelays);
                            }).catch(function (err)
                            {
                                return res.status(503).json(err);
                            });
            })
        })
    }
    catch (err)
    {
        return res.status(500).json(err);
    }
}

1 个答案:

答案 0 :(得分:0)

我将确保您的查询正确找到了任务。.我将记录Task.find查询找到的任务计数。只要Task.find返回要更新的任务,代码就对我有用。

function delayAllTasks(req, res, next)
{
    const givenProjectId = req.body.project_id;
    var delays_by = req.body.delays_by;

    Task.find({ project_id: givenProjectId }).exec((err, tasks) => {
            console.log("Updating task count:", tasks ? tasks.length: 0);
            tasks.forEach((eachTasks) => {

...