node.js Sequelize实现单实例字段或批量自增、自减
2016-12-08 11:48
761 查看
一、单实例自增、自减
在Sequelize中,一个实例(Instance)表示数据库中的一行记录。Instance有两种:由
Model.build()创建的非持久化实例,和由
Model.create()等方法创建的持久化实例。无论是持久化还是非持久化实例,都会有
increment()、
decrement()两人上方法,分别用于字段值的自增和自减两种操作。
-
instance.increment(fields, [options])
- 字段值自增 -
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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
您可能感兴趣的文章:
相关文章推荐
- 节点利用js的Node 遍历找到repeater的一个字段 实例
- 使用Node.js实现一个简单的FastCGI服务器实例
- Node.js Sequelize如何实现数据库的读写分离
- Node.js 实现简单的接口服务器的实例代码
- Nodejs+Socket.io实现通讯实例代码
- node.js和socket.io纯js实现的即时通讯实例分享
- node.js系列(实例):原生node.js+formidable模块实现简单的文件上传
- Node.js 实现简单小说爬虫实例
- Node.js读写文件之批量替换图片的实现方法
- 在Node.js中实现文件复制的方法和实例
- node.js实现多图片上传实例
- node.js系列(实例):原生node.js实现静态资源管理
- Node.js 博客实例(四)实现用户页面和文章页面
- node.js爬虫爬取电影天堂,实现电视剧批量下载。
- Node.js Redis Expess 开发环境配置及Session实现服务器间共享实例
- 在Node.js中实现文件复制的方法和实例
- 通过Node.js Stream API 实现逐行读取的实例
- node.js和socket.io纯js实现的即时通讯实例分享
- NODEJS sequelize中联合唯一索引的实现
- nodejs redis 发布订阅机制封装实现方法及实例代码