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性能
Feb 24 Javascript
node.js中的emitter.emit方法使用说明
Dec 10 Javascript
Jquery日历插件制作简单日历
Oct 28 Javascript
jquery对dom节点的操作【推荐】
Apr 15 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
Nov 22 Javascript
angularjs的select使用及默认选中设置
Apr 08 Javascript
JS实现的合并多个数组去重算法示例
Apr 11 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
Vue 实现树形视图数据功能
May 07 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
Aug 14 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
微信小程序实现搜索指定景点周边美食、酒店
May 18 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
phpfans留言版用到的install.php
2007/01/04 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
prototype1.4中文手册
2006/09/22 Javascript
让Firefox支持event对象实现代码
2009/11/07 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
python如何使用unittest测试接口
2018/04/04 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
银行进社区活动总结
2014/07/07 职场文书
委托书的写法
2014/08/30 职场文书
计划生育诚信协议书
2014/11/02 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
中学生学习保证书
2015/02/26 职场文书
Python 键盘事件详解
2021/11/11 Python
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python