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


Posted in Javascript onDecember 08, 2016

一、单实例自增、自减

在Sequelize中,一个实例(Instance)表示数据库中的一行记录。Instance有两种:由Model.build()创建的非持久化实例,和由Model.create()等方法创建的持久化实例。无论是持久化还是非持久化实例,都会有increment()decrement()两人上方法,分别用于字段值的自增和自减两种操作。

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

如,查找id为1的用户,并将其年龄自增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的用户年龄增加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

总结

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

Javascript 相关文章推荐
javascript css float属性的特殊写法
Nov 13 Javascript
js下通过prototype扩展实现indexOf的代码
Dec 08 Javascript
javascript中的document.open()方法使用介绍
Oct 09 Javascript
使用VS开发 Node.js指南
Jan 06 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
Oct 30 Javascript
使用Node.js处理前端代码文件的编码问题
Feb 16 Javascript
JavaScript ES6的新特性使用新方法定义Class
Jun 28 Javascript
BootStrap 动态添加验证项和取消验证项的实现方法
Sep 28 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
小程序实现列表删除功能
Oct 30 Javascript
vue 表单之通过v-model绑定单选按钮radio
May 13 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
Vue.JS入门教程之自定义指令
Dec 08 #Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
Dec 08 #Javascript
node.js学习之交互式解释器REPL详解
Dec 08 #Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
Dec 08 #Javascript
JS中用childNodes获取子元素换行会产生一个子元素
Dec 08 #Javascript
微信公众号 摇一摇周边功能开发
Dec 08 #Javascript
Vue概念及常见命令介绍(1)
Dec 08 #Javascript
You might like
php生成圆角图片的方法
2015/04/07 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
9种方法优化jQuery代码详解
2020/02/04 jQuery
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
使用Python进行目录的对比方法
2018/11/01 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
python用match()函数爬数据方法详解
2019/07/23 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
python 如何实现遗传算法
2020/09/22 Python
python3中数组逆序输出方法
2020/12/01 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
洗煤厂厂长岗位职责
2014/01/03 职场文书
客户服务经理岗位职责
2014/01/29 职场文书
作风转变心得体会
2014/09/02 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
工作总结与自我评价
2014/09/18 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
MySQL触发器的使用
2021/05/24 MySQL