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 相关文章推荐
基于jquery的用鼠标画出可移动的div
Sep 06 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
js中的getAttribute方法使用示例
Aug 01 Javascript
JS中自定义定时器让它在某一时刻执行
Sep 02 Javascript
javascript事件冒泡和事件捕获详解
May 26 Javascript
javaScript数组迭代方法详解
Apr 14 Javascript
Angularjs实现搜索关键字高亮显示效果
Jan 17 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
Jun 02 Javascript
Vue中render函数的使用方法
Jan 31 Javascript
vue本地打开build后生成的dist文件夹index.html问题
Sep 04 Javascript
vue实现移动端input上传视频、音频
Aug 18 Javascript
JavaScript实现前端倒计时效果
Feb 09 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与MySQL交互使用详解
2006/10/09 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
event.srcElement+表格应用
2006/08/29 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
jquery操作select大全
2014/04/25 Javascript
Node.js模块加载详解
2014/08/16 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
python随机生成库faker库api实例详解
2019/11/28 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
诉讼代理人授权委托书
2014/04/08 职场文书
端午节演讲稿
2014/05/23 职场文书
学习党代会心得体会
2014/09/05 职场文书
个人政治思想总结
2015/03/05 职场文书
个人借条范本
2015/05/25 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
httpclient调用远程接口的方法
2022/08/14 Java/Android