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插件tipswindown与hintbox冲突
Nov 05 Javascript
浅析document.ready和window.onload的区别讲解
Dec 18 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
May 15 Javascript
js文件包含的几种方式介绍
Sep 28 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
May 01 Javascript
利用Javascript实现一套自定义事件机制
Dec 14 Javascript
详解webpack 热更新优化
Sep 13 Javascript
玩转vue的slot内容分发
Sep 22 Javascript
Next.js项目实战踩坑指南(笔记)
Nov 29 Javascript
详解微信小程序支付流程与梳理
Jul 16 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
May 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
给多个地址发邮件的类
2006/10/09 PHP
怎样去阅读一份php源代码
2009/08/21 PHP
测试php函数的方法
2013/11/13 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
Python封装原理与实现方法详解
2018/08/28 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
SQL语言面试题
2013/08/27 面试题
运动会表扬稿大全
2014/01/16 职场文书
文秘个人求职信范文
2014/04/22 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
经营目标责任书
2015/05/08 职场文书
OpenCV实现反阈值二值化
2021/11/17 Java/Android
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL