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 日期对象Date扩展方法
May 30 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
理解javascript中的严格模式
Feb 01 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
May 23 Javascript
浅谈JavaScript函数的四种存在形态
Jun 08 Javascript
JavaScript里 ==与===区别详解
Aug 16 Javascript
关于JavaScript数组你所不知道的3件事
Aug 24 Javascript
vue-router配合ElementUI实现导航的实例
Feb 11 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
Mar 21 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
Apr 11 Javascript
简单了解vue.js数组的常用操作
Jun 17 Javascript
js正则表达式简单校验方法
Jan 03 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 array_search() 函数使用
2010/04/13 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
php常用字符函数实例小结
2016/12/29 PHP
php获取linux命令结果的实例
2017/03/13 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
python time.strptime格式化实例详解
2021/02/03 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
幼儿教师师德承诺书
2014/05/23 职场文书
工程资料员岗位职责
2015/04/13 职场文书
新郎接新娘保证书
2015/05/08 职场文书
今日说法观后感
2015/06/08 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python