Node.js Sequelize实现单实例字段或批量自增、自减

作者:后端茶话

时间:2026-10-31

浏览:244

本文详解在Node.js Sequelize中如何对数据库字段进行自增和自减操作。内容涵盖单实例的increment和decrement方法,包括默认值与自定义by参数的使用,以及利用Model.update结合sequelize.literal实现批量字段的灵活增减。

文章目录

单实例自增与自减操作

一、单实例自增、自减

在Sequelize框架内,单个实例(Instance)对应数据库中的一条记录。此类实例分为两类:通过Model.build()构建的非持久化对象,以及经由Model.create()等函数生成的持久化对象。无论实例状态如何,均具备increment()与decrement()两种方法,分别执行字段值的递增与递减操作。

  1. instance.increment(fields, [options]) - 字段值自增
  2. instance.decrement(fields, [options]) - 字段值自减

例如,检索id为1的用户记录,并将其age字段值增加1:


var User = sequelize.import('../lib/model/user/user');
User.findById(1).then(function(user){
 user.increment('age').then(function(user){
 console.log('success');
 })
})

上述increment()方法所生成的SQL语句如下:


UPDATE `user` SET `age`=`age` + 1 WHERE `id` = 1

increment()与decrement()默认递增或递减的数值为1。若需指定其他数值,可在[options]参数中通过by属性进行设定。

例如,将用户的number与age两个字段值各减少2,可通过以下方式实现:


user.increment(['age', 'number'], {by:2}).then(function(user){
 console.log('success');
})

生成的SQL语句如下:


UPDATE `user` SET `age`=`age` + 2,`number`=`number` + 2 WHERE `id` = 1

fields参数亦支持以对象形式传入,并明确指定各字段的自增或自减值。在此模式下,options.by参数将被忽略。

例如,将用户的number字段增加2、age字段减少1:


user.increment({age:-1, number:2}, {by:5}).then(function(user){
 console.log('success');
})

生成的SQL语句如下:


UPDATE `user` SET `age`=`age` + -1,`number`=`number` + 2 WHERE `id` = 1

批量自增与自减实现

二、 批量自增、自减

increment()与decrement()均针对单个实例执行递增或递减操作,即作用对象为数据库中的一行数据。若需执行如下批量自增、自减操作,则无法直接使用Instance方法:


UPDATE `user` SET `age`=`age` + 1 WHERE `number` > 10;

在Sequelize中,批量操作通常由模型(Model)承担。然而,Model并未提供increment()与decrement()方法,故无法如Instance般便捷地执行自增或自减。

此时,可结合Model.update()与sequelize顶层方法sequelize.literal()来实现:

sequelize.literal(val) - 创建字面量对象

sequelize.literal()方法用于构建字面量对象,该对象(val)将直接嵌入生成的SQL语句中,且不经过任何转义处理。

例如,将number大于10的用户age字段值增加1:


User.update({sex:sequelize.literal('`age` +1')}, {where:{number:{$gt:10}}}).then(function(user){
 console.log('success');
})

生成的SQL语句如下:


UPDATE `user` SET `age`=`age` +1 WHERE `number` > 10

总结

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章