首页 > 解决方案 > 如何在 Nodejs 中使用 If 语句和 for 循环?

问题描述

我有两个集合开发人员和项目。我想将多个项目分配给开发人员,但我不想重复分配任何项目。

/*@Submit assign project to developer */
exports.putDevAssign = (req, res, next) => {
    const {projectId, teamId} = req.body

    Team.findById(teamId)
    .then(result => {
        if(result.project.length == 0 ) {
            Team.findByIdAndUpdate(teamId, {$push: { project : projectId } }, { new: true }).populate('project')
                    .then(result => {
                        res.redirect('/Assigned-Developer/' + teamId)
                    })
                    .catch(err => console.log(err))
        } else {
            for(let i = 0; i < result.project.length; i++) {
                if( projectId == result.project[i] ) {  
                    req.flash('message', 'Already Assigned')
                    return res.redirect('/Assigned-Developer/' + teamId)
                } else {
                    console.log('hello')
                    Team.findByIdAndUpdate(teamId, {$push: { project : projectId } }, { new: true }).populate('project')
                    .then(result => {
                        return res.redirect('/Assigned-Developer/' + teamId)
                    })
                    .catch(err => console.log(err))
                }
            }
        }
    })
    .catch(err => console.log)
}

但在上面的代码中,我可以分配第一个项目,它既不会重复存储。但从第二个项目开始,它被重复存储。我不希望这种情况发生。我只想分配唯一的项目。帮我解决我犯的这个愚蠢的错误。先感谢您。

标签: node.jsfor-loopif-statementmongoose

解决方案


当您比较现有项目时,您将检查每个元素并在元素不匹配时添加项目。在添加新项目之前,您应该比较所有当前项目。

试试这个代码:

/*@Submit assign project to developer */
exports.putDevAssign = (req, res, next) => {
    const {projectId, teamId} = req.body

    Team.findById(teamId)
    .then(result => {
        if(result.project.length == 0 ) {
            Team.findByIdAndUpdate(teamId, {$push: { project : projectId } }, { new: true }).populate('project')
                    .then(result => {
                        res.redirect('/Assigned-Developer/' + teamId)
                    })
                    .catch(err => console.log(err))
        } else {
            for(let i = 0; i < result.project.length; i++) {
                if( projectId == result.project[i] ) {  
                    req.flash('message', 'Already Assigned')
                    return res.redirect('/Assigned-Developer/' + teamId)  // project already in list
                }
            }
            // if code reached here, project not in current project list, must add it
            console.log('hello')
            Team.findByIdAndUpdate(teamId, {$push: { project : projectId } }, { new: true }).populate('project')
            .then(result => {
                return res.redirect('/Assigned-Developer/' + teamId)
            })
            .catch(err => console.log(err))
            }
        }
    })
    .catch(err => console.log)
}

推荐阅读