为了账号安全,请及时绑定邮箱和手机立即绑定

更新电影分类问题

老师您好:

    我在update movie 的分类时出现了问题,update改写了movie的分类。

    完成后movie的category属性得到了更新,但是category里面movies仍是旧的,请问是哪里出了问题?

    

exports.update=function(req,res){

var id =req.params.id

if(id){

Movie.findById(id,function(err,movie){

Category.find({},function(err,categories){

res.render('admin',{

title:'后台更新页',

movie:movie,

categories:categories

})

})

})

}

}



正在回答

4 回答

Fts 童鞋的思路是很nice的,简单粗暴,但是真正的问题并不是打开首页性能会差一点,而是这样做会导致数据库紊乱,categories表中的数据和movies表中的数据不能一一对应

0 回复 有任何疑惑可以回复我~

@Fts你这里不用遍历category中的数组,直接pop(id),可以吗?pop不是直接吧最后一个元素pop出去吗?

0 回复 有任何疑惑可以回复我~
#1

慕粉3924594

回错贴了。。。
2016-09-19 回复 有任何疑惑可以回复我~
//index
exports.index = function (req, res) {
    Category.find({}, function (err, categories) {
        if (err) {
            console.log(err)
        }

        var map = {}
        for (i in categories) {
            map[categories[i]._id] = i
            categories[i].movies=[]
        }
        
        Movie.find({}, function (err, movies) {
            for (i in movies) {
                categories[map[movies[i].category]].movies.push(movies[i])
            }
            res.render('index', {
                title: '',
                categories: categories
            })
        })
    })
}

在index中可以这样写,这样就可以把category中的movies字段删掉,保存电影的时候也不需要修改category表,声明map是为了减少遍历次数,我这样的写法,只需要将categories和movies各遍历一遍即可。这样写的缺点就是打开首页的性能会差一点,优点是更新和删除电影的时候不需要对category表进行任何操作(尤其是更新电影,非常麻烦)

1 回复 有任何疑惑可以回复我~

问题并不出在update函数里面.而在save函数里面,因为修改已存在movie的category属性时,你并没有在新的分类中添加这部电影。同时也存在一个问题,你没有从原来的分类中删除这部电影,这导致这部电影依旧存在原来的分类中。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
node建站攻略(二期)——网站升级
  • 参与学习       51940    人
  • 解答问题       408    个

帮助你深入前后端开发留下的迷惑,为进一步自学打下基础

进入课程

更新电影分类问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信