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 IE 浏览器判定代码
Mar 21 Javascript
jQuery.extend()的实现方式详解及实例
Jun 29 Javascript
javascript实现的DES加密示例
Oct 30 Javascript
JavaScript作用域与作用域链深入解析
Dec 06 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 Javascript
Javascript函数式编程简单介绍
Oct 11 Javascript
详解react-webpack2-热模块替换[HMR]
Aug 03 Javascript
ES6学习教程之块级作用域详解
Oct 09 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 Javascript
js 计算月/周的第一天和最后一天代码
Feb 01 Javascript
JavaScript接口实现方法实例分析
May 16 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
Nov 12 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
解析PHP 5.5 新特性
2013/07/02 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
php中namespace use用法实例分析
2016/01/22 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
Python正则表达式的使用范例详解
2014/08/08 Python
详解Python多线程
2016/11/14 Python
Django数据库表反向生成实例解析
2018/02/06 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
QML用PathView实现轮播图
2020/06/03 Python
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
内容编辑个人求职信
2013/12/10 职场文书
医药工作岗位求职信分享
2013/12/31 职场文书
防沙治沙典型材料
2014/05/07 职场文书
高考励志标语
2014/06/05 职场文书
技术支持岗位职责
2015/02/13 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
同学聚会通知书
2015/04/20 职场文书
办公用品管理制度
2015/08/04 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
一文搞懂Python Sklearn库使用
2021/08/23 Python