node.js - Sequelize save() 问题

标签 node.js sequelize.js

将 Sequelize 与 NodeJS 结合使用时,我发现模型上的 .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() 时,它使用更新 sql 中的条件:

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

我的问题:这是预期的行为吗?我个人认为它只会更新它最初从数据库中提取的记录,但也许我缺少实现此目的的方法?

我目前的解决方案是使用原始查询返回的对象的 ID 再次调用 findOne,然后对此调用 save()。

最佳答案

您使用的是什么版本的 Sequelize?我刚刚使用 3.5.1 运行了一个简单的测试,它如您所料的那样工作。

起始表:

+----+-------------+--------+
| 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');
  });
});

给我以下 SQL:

UPDATE `users` SET `type`='IRONMAN',`updatedAt`='2015-08-20 05:07:49' WHERE `id` = 2

还有下表

+----+-------------+---------+
| id |  username   |  type   |
+----+-------------+---------+
|  1 | joshua f    | IRONMAN |
|  2 | joshua f jr | NORMAL  |
+----+-------------+---------+

关于node.js - Sequelize save() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32092369/

相关文章:

javascript - 错误: Cannot find module './models/user'

javascript - 跨 Node.js 模块共享下划线 mixins

javascript - 我如何在同一目录中需要来自 index.js 的内容?

node.js - export.create 和 router.post 有什么区别?

MYSQL:连接到 localhost 和 host.docker.internal

node.js - redis扫描迭代器配置

angularjs - 如何在 Angular 客户端中处理 passport-facebook 回调?

javascript - 未处理的拒绝 SequelizeDatabaseError : column "foo_bar" of relation "bar" already exists

javascript - 将模型 Sequelize 为空/空

javascript - 无法使用 Horseman 单击元素