源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

node.js Sequelize实现单实例字段或批量自增、自减

  • 时间:2021-08-12 19:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:node.js Sequelize实现单实例字段或批量自增、自减
一、单实例自增、自减 在Sequelize中,一个实例(Instance)表示数据库中的一行记录。Instance有两种:由[code]Model.build()[/code]创建的非持久化实例,和由[code]Model.create()[/code]等方法创建的持久化实例。无论是持久化还是非持久化实例,都会有[code]increment()[/code] 、[code]decrement()[/code]两人上方法,分别用于字段值的自增和自减两种操作。 [list=1] [*][code]instance.increment(fields, [options])[/code] - 字段值自增[/*] [*][code]instance.decrement(fields, [options]) [/code]- 字段值自减 [/*] [/list] 如,查找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');
 })
})
其中[code]increment()[/code]方法生成的SQL语句如下:
UPDATE `user` SET `age`=`age` + 1 WHERE `id` = 1
[code]increment()[/code]和[code]decrement()[/code]默认的自增、自减值是1。如果希望使用其它值,可在选项参数[options]中通过by参数指定。 如,将用户的number、age两个字段减小2,可以通过以下方式实现:
user.increment(['age', 'number'], {by:2}).then(function(user){
 console.log('success');
})
[b]生成的SQL如下:[/b]
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
[b]二、 批量自增、自减[/b] [code]increment()[/code]和[code]decrement()[/code]都是针对单个实例进行自增或自减操作的,也就是说操作的数据为数据库中的一行数据。要实现类似如下批量自增、自减操作,就无法通过Instance操作:
UPDATE `user` SET `age`=`age` + 1 WHERE `number` > 10;
在Sequelize中,指量操作一般是通过模型(Model)来实现。但Model并没有[code]increment()[/code]和[code]decrement()[/code]方法,无法像Instance那样方便的进行自增或自减。 这时,我们可以通过[code]Model.update()[/code]并借助sequelize中的顶级方法[code]sequelize.literal()[/code]来实现: [code]sequelize.literal(val) [/code]- 创建字面量对象 [code]sequelize.literal()[/code]方法用于创建一个字面量对象,该对象(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
[b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部