2017-01-29 1 views
2

Ich habe ein Benutzermodell in Sequelize für eine Postgres db:Wie ein Array in Sequelize Postgres aktualisieren

var User = sequelize.define('User', { 
fb_id: DataTypes.STRING, 
access_token: DataTypes.TEXT, 
first_name: DataTypes.STRING, 
last_name: DataTypes.STRING, 
email: DataTypes.TEXT, 
profilePictureURL: DataTypes.TEXT, 
library: DataTypes.ARRAY(DataTypes.STRING) 
}, { 
underscored: true, 
classMethods: { 
    associate: function(models) { 

    } 
} 
    }); 

I durch Zugabe von ISBN-Nummern auf das Feld die Bibliothek Feld zu aktualisieren versuchen. Dies ist der Code für meine POST-Anfrage:

req.user.library.push(req.body._isbn); // adding the posted ISBN to the user object in my express-session 

User.findOrCreate({where: {fb_id: req.user.fb_id}, 
     defaults: { 
      access_token :  req.user.access_token,     
      first_name :  req.user.first_name, 
      last_name :   req.user.last_name, 
      email :    req.user.email, 
      profilePictureURL : req.user.profilePictureURL, 
      library: req.user.library // new library object 
     }}) 
     .spread(function (updatedUser, created){ 
      res.status(200).json(updatedUser); 
     }).error(function(err){ 
      res.status(500).json(err); 
     }); 

Es gibt keine Fehler, aber die Bibliothek Feld wird nach der Überprüfung des updatedUser Objekts nicht aktualisiert. Wie aktualisiere ich ein Array-Feld in Sequelize korrekt?

Antwort

0

Ich bin schon mal darauf gestoßen und habe die Antwort tief in ihren Github-Ausgaben gefunden. So wie ich es erreicht ist

User.find({ 
    where: { 
    fb_id: req.user.fb_id 
    } 
}) 
.then((user) => { 
    user.library.push(req.body._isbn) 
    user.update({ 
    library: user.library 
    },{ 
    where: { 
     fb_id: req.user.fb_id 
    } 
    }) 
    .then(user => res.json(user)) 
}) 

Es fühlt sich definitiv wie es eine bessere Art und Weise ist, aber auf diese Weise, wie ich fand einen Weg.