ホームページ  >  記事  >  ウェブフロントエンド  >  node.js Sequelize は、単一インスタンスのフィールドまたはバッチの自動インクリメントおよび自動デクリメントを実装します。

node.js Sequelize は、単一インスタンスのフィールドまたはバッチの自動インクリメントおよび自動デクリメントを実装します。

高洛峰
高洛峰オリジナル
2016-12-28 11:16:182108ブラウズ

1. 単一インスタンスの自動インクリメントと自動デクリメント

Sequelize では、インスタンス (Instance) はデータベース内のレコードの行を表します。インスタンスには、Model.build() によって作成される非永続インスタンスと、Model.create() などのメソッドによって作成される永続インスタンスの 2 種類があります。永続インスタンスか非永続インスタンスかに関係なく、increment() と decrement() という 2 つのメソッドがあり、それぞれフィールド値のインクリメントとデクリメントに使用されます。

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 パラメーターを通じてそれを指定できます。

たとえば、ユーザーの数と年齢のフィールドを 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 パラメータは無視されます。

たとえば、ユーザーの番号を 2 増やし、年齢を 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

2. バッチ自動インクリメントと自動デクリメント

increment() と decrement() は、単一のインスタンスに対してインクリメントまたはデクリメント操作を実行します。これは、操作されるデータがデータベース内のデータ行であることを意味します。次のようなバッチ自動インクリメントおよび自動デクリメント操作を実装するには、インスタンス操作を使用できません:

UPDATE `user` SET `age`=`age` + 1 WHERE `number` > 10;

Sequelize では、インデックス操作は通常、モデルを通じて実装されます。ただし、Model には、increment() および decrement() メソッドがないため、Instance のように簡単にインクリメントまたはデクリメントすることはできません。

現時点では、Model.update() を使用し、Sequelize の最上位メソッド sequelize.literal() を使用して次のことを実現できます:

sequelize.literal(val) - リテラル オブジェクトを作成します

sequelize.literal()メソッド リテラル オブジェクトの作成に使用されます。このオブジェクト (val) は、エスケープなしで生成された SQL ステートメントに直接渡されます。

たとえば、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

概要

これがこの内容のすべてです。記事が役に立てば幸いです。この内容は皆さんの勉強や仕事に役立ちます。ご質問がある場合は、メッセージを残して連絡してください。

node.js の単一インスタンス フィールドの Sequelize 実装やバッチ自動インクリメントおよび自動デクリメント関連記事の詳細については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。