Je travaille avec node sequelize avec postgres base de données. Je charge des enregistrements paginés dans mon interface utilisateur, maintenant je dois obtenir le nombre total d'enregistrements avec la même requête que j'utilise pour récupérer les enregistrements paginés. N'importe qui, veuillez donner l'exemple de configuration séquentielle pour faire de même. Veuillez consulter mon exemple de requête postgres attendue pour clarifier ma question
SELECT count(*) over() as total ,name FROM students WHERE gender='male' LIMIT 2
Merci d'avance
Si vous voulez éviter de spécifier SQL, vous pouvez également utiliser findAndCountAll
Vous ne pouvez pas le faire avec la suite, mais vous pouvez le faire via 2 requêtes distinctes, l'une pour obtenir les données dont vous avez besoin et l'autre pour obtenir le nombre total.
premier :
await Model.findAll({ where: { columnName: condition }});
deuxième :
await Model.count({ where: { columnName: condition }});
si vous voulez le faire dans une seule requête, ce qui n'est peut-être pas le meilleur moyen (parce que vous ajoutez des métadonnées pour chaque résultat qui n'est pas lié aux métadonnées), vous pouvez créer un raw query
comme ça:
await sequelize.query('select count(*) over(), name from table where condition', { model: Model });
J'espère que mon explication vous aidera :),
Bonne journée!
Vous pouvez utiliser findAndCountAll
à cet effet.
findAndCountAll - Recherche plusieurs éléments dans la base de données, renvoie les données et le nombre total
Voici un exemple:
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 };
}
Il utilise les opérateurs de déstructuration et de propagation ES6 et la syntaxe async
/await
.
params
est un objet avec les propriétés limit
et offset
qui écrasent la limite et l'offset par défaut.
Notez que vous devrez peut-être passer distinct: true
également si vous include
d'autres modèles dans une requête.