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 相关文章推荐
Extjs学习笔记之七 布局
Jan 08 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
Feb 23 Javascript
node.js中的fs.chmod方法使用说明
Dec 18 Javascript
jQuery使用deferreds串行多个ajax请求
Aug 22 Javascript
在JavaScript中调用Java类和接口的方法
Sep 07 Javascript
javascript中闭包概念与用法深入理解
Dec 15 Javascript
js实现简单的二级联动效果
Mar 09 Javascript
详谈for循环里面的break和continue语句
Jul 20 Javascript
实例解析Vue.js下载方式及基本概念
May 11 Javascript
linux 后台运行node服务指令方法
May 23 Javascript
原生JS生成指定位数的验证码
Oct 28 Javascript
小程序自定义轮播图圆点组件
Jun 25 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中GET变量的使用
2006/10/09 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
js实现广告漂浮效果的小例子
2013/07/02 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
安装dbus-python的简要教程
2015/05/05 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
浅析python 字典嵌套
2020/09/29 Python
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
材料专业毕业生求职信
2014/02/26 职场文书
音乐幼师求职信
2014/07/09 职场文书
2015年调度员工作总结
2015/04/30 职场文书
公司保洁员管理制度
2015/08/04 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang