2016-06-05 9 views
3

Ich habe überall gesucht, und ich habe es nicht leicht zu verstehen, Verfahren zum Aktualisieren eines sequelize Array, wie dies mit einer normalen Zeichenfolge gefunden:aktualisiert Sequelize Array

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

    res.json(user); 
}) 
+0

Bitte klären Sie, was Sie mit einem Sequelize-Array meinen - Eine Spalte des Array-Typs, ein Array von Instanzen? –

+0

Eine Spalte des Array-Typs –

Antwort

2

Sequelize unterstützt kein Bulk-Updates mit einer Array, siehe https://github.com/sequelize/sequelize/issues/4501

Sie müssen eine benutzerdefinierte Funktion implementieren. Hier ist ein einfaches Beispiel um Ihnen eine Vorstellung zu geben:

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 
}); 
1

Was ich mich wie folgt gelöst:

Fall 1: Wenn Sie mehrere Zeilen auf dem gleichen Wert mit unterschiedlichen Bedingungen

aktualisieren möchten
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); 
}); 

Fall 2: wenn Sie mehrere Zeilen mit unterschiedlichen Werten für die verschiedenen Arten von Bewertungen aktualisieren:

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){ 

    });