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 相关文章推荐
Textarea与懒惰渲染实现代码
Jan 04 Javascript
jquery图片不完全按比例自动缩小的简单代码
Jul 29 Javascript
在每个匹配元素的外部插入新元素的方法
Dec 20 Javascript
JS实现的5级联动Select下拉选择框实例
Aug 17 Javascript
Node.js实现JS文件合并小工具
Feb 02 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
Mar 08 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
Mar 10 Javascript
详解JSONObject和JSONArray区别及基本用法
Oct 25 Javascript
Vue入门之数据绑定(小结)
Jan 08 Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 Javascript
JS多个表单数据提交下的serialize()应用实例分析
Aug 27 Javascript
mpvue 项目初始化及实现授权登录的实现方法
Jul 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
PHP5 面向对象程序设计
2008/02/13 PHP
php获取域名的google收录示例
2014/03/24 PHP
在新窗口打开超链接的方法小结
2013/04/14 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
python 实现生成均匀分布的点
2019/12/05 Python
Python实现图像的垂直投影示例
2020/01/17 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
什么是GWT的Module
2013/01/20 面试题
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
记者岗位职责
2014/01/06 职场文书
初中同学聚会感言
2014/02/11 职场文书
淘宝好评语大全
2014/05/05 职场文书
乳制品整治工作方案
2014/05/29 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
新兵入伍决心书
2015/09/22 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
Java并发编程之Executor接口的使用
2021/06/21 Java/Android
Redis Stream类型的使用详解
2021/11/11 Redis