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 相关文章推荐
HTML-CSS群中单选引发的“事件”
Mar 05 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
Apr 18 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 Javascript
javascript(js)的小数点乘法除法问题详解
Mar 07 Javascript
跟我学习javascript的函数调用和构造函数调用
Nov 16 Javascript
JSONObject使用方法详解
Dec 17 Javascript
使用JS实现图片展示瀑布流效果的实例代码
Sep 12 Javascript
JS给swf传参数的实现方法
Sep 13 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
Sep 28 Javascript
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 jQuery
vue初始化动画加载的实例
Sep 01 Javascript
package.json配置文件构成详解
Aug 27 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
关于svn冲突的解决方法
2013/06/21 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
jQuery html()等方法介绍
2009/11/18 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
2019/06/17 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python文件夹与文件的操作实现代码
2014/07/13 Python
python搜索指定目录的方法
2015/04/29 Python
python开发之函数定义实例分析
2015/11/12 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
python实现贪吃蛇双人大战
2020/04/18 Python
python判断正负数方式
2020/06/03 Python
环保建议书300字
2014/05/14 职场文书
初三毕业评语
2014/12/26 职场文书
电视新闻稿
2015/07/17 职场文书
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技