首頁 > web前端 > js教程 > node.js Sequelize實作單一實例欄位或批量自增、自減

node.js Sequelize實作單一實例欄位或批量自增、自減

高洛峰
發布: 2016-12-28 11:16:18
原創
2129 人瀏覽過

一、單一實例自增、自減

在Sequelize中,一個實例(Instance)表示資料庫中的一行記錄。 Instance有兩種:由Model.build()所建立的非持久化實例,和由Model.create()等方法所建立的持久化實例。無論是持久化或非持久化實例,都會有increment() 、decrement()兩人上方法,分別用於字段值的自增和自減兩種操作。

instance.increment(fields, [options]) - 字段值自增

instance.decrement(fields, [options]) - 字段值自減

如,查找id為1的用戶,並將其年齡為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
登入後複製

 ,並指定自增、自減值。在這種情況下,會忽略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
登入後複製

 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(sequelize.literal(sequelize.literal(sequelize.lite)(sequelize.literal(sequelize.lite)(sequelize.lite)(sequelize.literal(sequelize.lite)(sequelize.lite)(sequelize.lite)(sequelize.lite)(se)用於建立字面量對象,該物件(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
登入後複製

   產生的SQL語句如下:

rrreee

 內容對大家的學習或工作能帶來一定的幫助,如果有疑問大家可以留言交流。

更多node.js Sequelize實作單一實例欄位或批次自增、自減相關文章請關注PHP中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板