node.js Sequelize實(shí)現(xiàn)單實(shí)例字段或批量自增、自減
一、單實(shí)例自增、自減
在Sequelize中,一個(gè)實(shí)例(Instance)表示數(shù)據(jù)庫(kù)中的一行記錄。Instance有兩種:由Model.build()創(chuàng)建的非持久化實(shí)例,和由Model.create()等方法創(chuàng)建的持久化實(shí)例。無(wú)論是持久化還是非持久化實(shí)例,都會(huì)有increment() 、decrement()兩人上方法,分別用于字段值的自增和自減兩種操作。
instance.increment(fields, [options])- 字段值自增instance.decrement(fields, [options])- 字段值自減
如,查找id為1的用戶(hù),并將其年齡自增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語(yǔ)句如下:
UPDATE `user` SET `age`=`age` + 1 WHERE `id` = 1
increment()和decrement()默認(rèn)的自增、自減值是1。如果希望使用其它值,可在選項(xiàng)參數(shù)[options]中通過(guò)by參數(shù)指定。
如,將用戶(hù)的number、age兩個(gè)字段減小2,可以通過(guò)以下方式實(shí)現(xiàn):
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參數(shù)還可以通過(guò)對(duì)象傳入,并指定自增、自減值。這種情況下,會(huì)忽略options.by參數(shù)。
如,將用戶(hù)的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()都是針對(duì)單個(gè)實(shí)例進(jìn)行自增或自減操作的,也就是說(shuō)操作的數(shù)據(jù)為數(shù)據(jù)庫(kù)中的一行數(shù)據(jù)。要實(shí)現(xiàn)類(lèi)似如下批量自增、自減操作,就無(wú)法通過(guò)Instance操作:
UPDATE `user` SET `age`=`age` + 1 WHERE `number` > 10;
在Sequelize中,指量操作一般是通過(guò)模型(Model)來(lái)實(shí)現(xiàn)。但Model并沒(méi)有increment()和decrement()方法,無(wú)法像Instance那樣方便的進(jìn)行自增或自減。
這時(shí),我們可以通過(guò)Model.update()并借助sequelize中的頂級(jí)方法sequelize.literal()來(lái)實(shí)現(xiàn):
sequelize.literal(val) - 創(chuàng)建字面量對(duì)象
sequelize.literal()方法用于創(chuàng)建一個(gè)字面量對(duì)象,該對(duì)象(val)會(huì)被直接傳入所生成的SQL語(yǔ)句中,而不會(huì)進(jìn)行任何轉(zhuǎn)義。
如,將number大于10的用戶(hù)年齡增加1:
User.update({sex:sequelize.literal('`age` +1')}, {where:{number:{$gt:10}}}).then(function(user){
console.log('success');
})
生成的SQL語(yǔ)句如下:
UPDATE `user` SET `age`=`age` +1 WHERE `number` > 10
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
Nodejs異步回調(diào)之異常處理實(shí)例分析
這篇文章主要介紹了Nodejs異步回調(diào)之異常處理,結(jié)合實(shí)例形式分析了nodejs基于中間件進(jìn)行異步回調(diào)異常處理過(guò)程出現(xiàn)的問(wèn)題與相應(yīng)的解決方法,需要的朋友可以參考下2018-06-06
node.js學(xué)習(xí)之交互式解釋器REPL詳解
Node.js REPL(Read Eval Print Loop:交互式解釋器) 表示一個(gè)電腦的環(huán)境,類(lèi)似Window 系統(tǒng)的終端或 Unix/Linux shell,我們可以在終端中輸入命令,并接收系統(tǒng)的響應(yīng)。下面這篇文章我們就來(lái)詳細(xì)的介紹下關(guān)于node.js交互式解釋器REPL的內(nèi)容,有需要的朋友們可以參考借鑒。2016-12-12
基于nodejs的微信JS-SDK簡(jiǎn)單應(yīng)用實(shí)現(xiàn)
這篇文章主要介紹了基于nodejs的微信JS-SDK簡(jiǎn)單應(yīng)用實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
Node.js創(chuàng)建一個(gè)簡(jiǎn)單的服務(wù)器的實(shí)現(xiàn)
Node.js是一個(gè)基于Chrome V8引擎的JavaScript運(yùn)行時(shí)環(huán)境,可以在服務(wù)器端運(yùn)行JavaScript代碼,本文主要介紹了Node.js創(chuàng)建一個(gè)簡(jiǎn)單的服務(wù)器的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
nodejs創(chuàng)建簡(jiǎn)易web服務(wù)器與文件讀寫(xiě)的實(shí)例
下面小編就為大家?guī)?lái)一篇node js系列課程-創(chuàng)建簡(jiǎn)易web服務(wù)器與文件讀寫(xiě)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
Node 創(chuàng)建第一個(gè)服務(wù)器應(yīng)用的操作方法
Node.js是一個(gè)基于Chrome V8引擎的JavaScript運(yùn)行環(huán)境,可以用于構(gòu)建高性能的網(wǎng)絡(luò)應(yīng)用程序,它采用事件驅(qū)動(dòng)、非阻塞I/O模型,使得程序可以以高效地方式處理并發(fā)請(qǐng)求,這篇文章主要介紹了Node 創(chuàng)建第一個(gè)服務(wù)器應(yīng)用,需要的朋友可以參考下2024-02-02

