web-dev-qa-db-fra.com

Sequelize configuration pour récupérer le nombre total avec des détails

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

9
Jamsheer

Si vous voulez éviter de spécifier SQL, vous pouvez également utiliser findAndCountAll

19
redgeoff

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!

8
Adrien De Peretti

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.

0
Yuriy Rypka