ノードsequelizepostgresデータベースで作業しています。私はUIにページ分割されたレコードを読み込んでいます。今度は、ページ分割されたレコードを取得するために使用しているのと同じクエリで、合計レコード数を取得する必要があります。誰でも、同じようにサンプルのsequelize構成を提供してください。私の質問を明確にするために、予想されるサンプルのpostgresクエリを参照してください
SELECT count(*) over() as total ,name FROM students WHERE gender='male' LIMIT 2
前もって感謝します
SQLの指定を避けたい場合は、 findAndCountAll
を使用することもできます
Sequelizeを使用してそれを行うことはできませんが、必要なデータを取得するためのクエリと合計数を取得するためのクエリの2つの個別のクエリを使用して実行できます。
最初の1つ :
await Model.findAll({ where: { columnName: condition }});
二つ目 :
await Model.count({ where: { columnName: condition }});
最善の方法ではない可能性がある1つのクエリでそれを実行する場合(モデルに関連するメタデータではない各結果にメタデータを追加するため)、次のようにraw query
を作成できます。
await sequelize.query('select count(*) over(), name from table where condition', { model: Model });
私の説明があなたのお役に立てば幸いです:)、
ごきげんよう!
この目的で findAndCountAll
を使用できます。
findAndCountAll-データベース内の複数の要素を検索し、データと合計数の両方を返します
次に例を示します。
const getStudents = async params => {
const { count, rows: students } = await Student.findAndCountAll({
where: {
gender: 'male',
},
limit: DEFAULT_PAGE_SIZE,
order: [['id', 'ASC']],
...params,
});
return { count, students };
}
これは、ES6の構造化解除演算子と拡散演算子、およびasync
/await
構文を使用しています。
params
は、デフォルトの制限とオフセットを上書きするlimit
およびoffset
プロパティを持つオブジェクトです。
クエリで他のモデルをinclude
する場合に備えて、 distinct: true
を渡す必要がある場合があることに注意してください。