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异步表单提交,图片上传,兼容异步模拟ajax技术
May 10 Javascript
jQuery中:submit选择器用法实例
Jan 03 Javascript
jquery中ready()函数执行的时机和window的load事件比较
Jun 22 Javascript
jQuery实现的进度条效果
Jul 15 Javascript
Bootstrap CSS布局之列表
Dec 15 Javascript
jQuery Validate让普通按钮触发表单验证的方法
Dec 15 Javascript
jQuery实现限制文本框的输入长度
Jan 11 Javascript
jQuery实现的浮动层div浏览器居中显示效果
Feb 03 Javascript
微信小程序 动态绑定数据及动态事件处理
Mar 14 Javascript
JS二叉树的简单实现方法示例
Apr 05 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
Aug 24 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
Nov 20 Javascript
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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
php接口技术实例详解
2016/12/07 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
js对象基础实例分析
2015/01/13 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
Python中optparser库用法实例详解
2018/01/26 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
详解python数据结构和算法
2019/04/18 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
汽车驾驶求职信
2013/10/25 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
红楼梦读书笔记
2015/06/25 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers