我正在使用 postgres 数据库中的节点 sequelize 。 我正在将分页记录加载到我的UI,现在我需要使用我用于检索分页记录的相同查询来获取总记录数。 任何人,请提供样本sequelize配置来做同样的事情。 请参阅我的预期样本postgres查询以澄清我的问题
SELECT count(*) over() as total ,name FROM students WHERE gender='male' LIMIT 2
提前致谢
答案 0 :(得分:6)
如果您想避免指定SQL,也可以使用findAndCountAll
答案 1 :(得分:5)
你不能用续集来做到这一点,但是你可以通过2个单独的查询来完成,一个用于获取所需的数据,另一个用于获取总数。
第一个:
await Model.findAll({ where: { columnName: condition });
第二个:
await Model.count({ where: { columnName: condition });
如果您想在一个查询中执行此操作(这可能不是最佳方式)(因为您为每个结果添加的元数据不是与模型相关的元数据),您可以创建raw query
,如下所示:
await sequelize.query('select count(*) over(), name from table where condition', { model: Model });
我希望我的解释可以帮助你:),
度过美好的一天!
答案 2 :(得分:0)
您可以为此使用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
。
答案 3 :(得分:0)
您可以通过两种方式对数据进行计数
1 :具有数据
const students = await students.findAndCountAll({
where: {
gender = "male"
}
});
console.log(students)
它将返回
gender
是男性的Count学生以及该学生的数据
2 :没有数据
const students = await students.findAndCountAll({
where: {
gender = "male"
}
});
console.log(students)
它将仅返回
gender
是男性的Count学生