更新Sequelize数组

4

我已经到处寻找,但没有找到一种易于理解的方法来更新sequelize数组,就像使用普通字符串一样:

db.User.update({name:req.body.name},{where : {username:req.body.username}}).then(function(user) {

    res.json(user);
})

请澄清您所说的sequelize数组是什么意思 - 是一个数组类型的列,还是一个实例数组? - Jan Aagaard Meier
数组类型的一列 - Danny McClafferty
2个回答

5
Sequelize不支持使用数组进行批量更新,请参见https://github.com/sequelize/sequelize/issues/4501
您需要实现一个自定义函数。以下是一个基本示例,以帮助您了解:
var promises = [];
userArray.forEach(function(user){
   promises.push(db.User.update({name:user.name},{where : {username:user.username}});
});
Promise.all(promises).then(function(){
    // success
}, function(err){
    // error
});

2

我将自己的解决方案如下:

情况1:如果您想使用不同的条件以相同的值更新多行

db.User.update({ name: 'name request' }, {
    where: {
        $or: [{ name: 'test 1', password: 'sasaccsa' }, {
            name: "test 2"
        }]
    }
}).then(function(user) {
    //query generate
    // UPDATE `User` SET `name`='name request' WHERE ((`name` = 'test 1' AND `password` = 'sasaccsa') OR `name` = 'test 2')
    res.json(user);
});

第二种情况:如果你想更新多行数据,但对于不同类型的评论,需要使用不同的更新值:

var arrayUpdate = [{
        name: 'test 1',
        id: 1
    }, {
        name: 'test 2',
        id: 2
    }, {
        name: 'test 3',
        id: 3
    }];
    sequelize.Promise.each(arrayUpdate, function(val, index) {
        return db.User.update({
            name: val.name
        },{
            where:{
                id: val.id
            }
        }).then(function(user) {
        }, function(err){

        });
    })
    .then(function(updateAll){
        //done update all
         res.json(updateAll);
    }, function(err){

    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接