Sequelize:パフォーマンスを最適化するためのエンティティからプレーンオブジェクトへの変換
Sequelize でエンティティをプレーンオブジェクトに変換する方法
Sequelize は Node.js 向けの ORM (Object-Relational Mapping) ライブラリです。エンティティは、データベース内のテーブルを表す Sequelize オブジェクトです。プレーンオブジェクトは、JavaScript の単純なオブジェクトです。
このチュートリアルでは、Sequelize を使用してエンティティをプレーンオブジェクトに変換する方法を説明します。これには、次の 2 つの方法があります。
get()
メソッドを使用するJSON.stringify()
とJSON.parse()
を使用する
get()
メソッドは、エンティティのすべてのプロパティを含むプレーンオブジェクトを返します。ただし、関連アソシエーションは含まれません。
const User = sequelize.define('user', {
name: Sequelize.STRING,
email: Sequelize.STRING
});
User.findOne(1).then(user => {
const plainObject = user.get({ plain: true });
console.log(plainObject); // { id: 1, name: 'John Doe', email: '[email protected]' }
});
JSON.stringify()
関数は、エンティティを JSON 文字列に変換します。その後、JSON.parse()
関数を使用して、プレーンオブジェクトに変換できます。この方法は、関連アソシエーションを含める場合に役立ちます。
const User = sequelize.define('user', {
name: Sequelize.STRING,
email: Sequelize.STRING
}, {
include: [
{ association: 'posts' }
]
});
User.findOne(1).then(user => {
const jsonString = JSON.stringify(user);
const plainObject = JSON.parse(jsonString);
console.log(plainObject); // { id: 1, name: 'John Doe', email: '[email protected]', posts: [ ... ] }
});
注意事項
get()
メソッドは、関連アソシエーションを含めません。関連アソシエーションを含める必要がある場合は、JSON.stringify()
とJSON.parse()
を使用する必要があります。- Sequelize バージョン 6 以降では、
get({ plain: true })
の代わりにtoJSON()
メソッドを使用できます。
Sequelize でエンティティをプレーンオブジェクトに変換するサンプルコード
サンプル 1: get() メソッドを使用する
const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mysql'
});
const User = sequelize.define('user', {
name: Sequelize.STRING,
email: Sequelize.STRING
});
User.findOne(1).then(user => {
const plainObject = user.get({ plain: true });
console.log(plainObject); // { id: 1, name: 'John Doe', email: '[email protected]' }
});
このコードは次のことを行います。
Sequelize
モジュールをインポートします。- Sequelize インスタンスを作成します。
User
モデルを定義します。id
が 1 のユーザーを検索します。get()
メソッドを使用して、プレーンオブジェクトを含むオブジェクトを取得します。- プレーンオブジェクトをコンソールにログ出力します。
サンプル 2: JSON.stringify() と JSON.parse() を使用する
const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mysql'
});
const User = sequelize.define('user', {
name: Sequelize.STRING,
email: Sequelize.STRING
}, {
include: [
{ association: 'posts' }
]
});
User.findOne(1).then(user => {
const jsonString = JSON.stringify(user);
const plainObject = JSON.parse(jsonString);
console.log(plainObject); // { id: 1, name: 'John Doe', email: '[email protected]', posts: [ ... ] }
});
説明
- 関連する
posts
アソシエーションを含むUser
モデルを検索します。 JSON.stringify()
関数を使用して、エンティティを JSON 文字列に変換します。JSON.parse()
関数を使用して、JSON 文字列をプレーンオブジェクトに変換します。
このサンプルコードは、基本的な使用方法を示すものです。具体的なニーズに合わせてコードを調整する必要がある場合があります。
補足
- Sequelize には、エンティティをプレーンオブジェクトに変換するための他にも多くの方法があります。詳細については、Sequelize ドキュメントを参照してください。
- プレーンオブジェクトをデータベースに保存する前に、セキュリティ上の考慮事項に注意する必要があります。プレーンオブジェクトには、機密情報が含まれていないことを確認してください。
Sequelize でエンティティをプレーンオブジェクトに変換するその他の方法
const User = sequelize.define('user', {
name: Sequelize.STRING,
email: Sequelize.STRING
});
User.findOne(1).then(user => {
const plainObject = user.toValue();
console.log(plainObject); // { id: 1, name: 'John Doe', email: '[email protected]' }
});
このコードは get()
メソッドとほぼ同じですが、toValue()
メソッドを使用しています。
lodash を使用する
lodash
は、JavaScript でよく使用されるユーティリティライブラリです。lodash
を使用して、エンティティをプレーンオブジェクトに変換することができます。
const _ = require('lodash');
const User = sequelize.define('user', {
name: Sequelize.STRING,
email: Sequelize.STRING
});
User.findOne(1).then(user => {
const plainObject = _.omit(user.toJSON(), ['id', 'createdAt', 'updatedAt']);
console.log(plainObject); // { name: 'John Doe', email: '[email protected]' }
});
このコードは、lodash.omit()
関数を使用して、エンティティの JSON 表現から不要なプロパティ (ID、作成日時、更新日時) を削除します。
カスタム関数を使用する
独自のニーズに合わせたカスタム関数を作成することもできます。
function toPlainObject(user) {
return {
id: user.id,
name: user.name,
email: user.email,
// ...その他のプロパティ
};
}
const User = sequelize.define('user', {
name: Sequelize.STRING,
email: Sequelize.STRING
});
User.findOne(1).then(user => {
const plainObject = toPlainObject(user);
console.log(plainObject); // { id: 1, name: 'John Doe', email: '[email protected]' }
});
このコードは、エンティティから必要なプロパティを抽出してプレーンオブジェクトを作成するカスタム関数 toPlainObject()
を定義します。
- 上記の方法はほんの一例です。ニーズに合わせて、他の方法を使用することもできます。
node.js sequelize.js