Sequelize save()问题

在NodeJS中使用Sequelize我发现模型上的.save()方法存在问题。

假设一个数据库表,其中包含如下条目:

{ id : 1, name : "mary", enteredCompetition : 1, won : 0 } { id : 2, name : "mark", enteredCompetition : 1, won : 0 } { id : 3, name : "maya", enteredCompetition : 1, won : 0 } { id : 4, name : "maci", enteredCompetition : 0, won : 0 } 

我检索了一个已经参加竞赛的用户,并且将该用户设置为获奖:

 User.findOne( { where : { enteredCompetition : 1 } } ) .then( function( user ) { user.won = 1; user.save().then( function() { // done } ); } ); 

问题是,这段代码然后继续更新数据库中所有“enteredCompetition”设置为1的用户。

我认为这与从findOne方法返回的模型对象的选项有关。 whereCollection被设置为{enteredCompetition:1},因此我假设它调用了save()时,它使用那些在update sql中的条件:

 UPDATE `users` SET `won`=1,`updatedAt`='2015-08-19 09:59:27' WHERE `enteredCompetition` = 1 

我的问题:这是预期的行为? 我个人认为它只会更新它最初从数据库中提取的logging,但也许我错过了一个方法来实现这一目标?

我目前的解决scheme是简单地调用findOne与原始查询返回的对象的id,然后调用save()。

你使用什么版本的Sequelize? 我只是用3.5.1运行一个简单的testing,它的工作正如你所期望的那样。

起始表:

 +----+-------------+--------+ | id | username | type | +----+-------------+--------+ | 1 | joshua f | NORMAL | | 2 | joshua f jr | NORMAL | +----+-------------+--------+ 
 db.user.findOne({ where: { type: 'NORMAL' } }).then(function(instance) { instance.type = 'IRONMAN'; instance.save().then(function() { console.log('saved'); }); }); 

尝试控制台login用户,看看它包含什么