Node.js 如果没有值,为什么postgres(带有sequelize)计数为1?
我使用sequelize来计算设备在过去24小时内收到的消息数 Sequelize将执行以下请求(我在末尾附加了Sequelize代码) 哪个回报Node.js 如果没有值,为什么postgres(带有sequelize)计数为1?,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我使用sequelize来计算设备在过去24小时内收到的消息数 Sequelize将执行以下请求(我在末尾附加了Sequelize代码) 哪个回报 id count 24 25790 163 1 95 1 id24的值正确,但其他值应为0 然后手动执行这个SQL查询 SELECT device.id, COUNT(record.id) AS count FROM device AS device LEFT OUTER JOIN record ON device.id = recor
id count
24 25790
163 1
95 1
id24
的值正确,但其他值应为0
然后手动执行这个SQL查询
SELECT device.id, COUNT(record.id) AS count
FROM device AS device
LEFT OUTER JOIN record ON device.id = record."deviceId" AND record.date > '2017-07-06 08:09:40.468 +00:00'
WHERE device."typeId" = '2'
GROUP BY device.id;
这给了我预期的结果
我看不出这两个查询之间的区别。有人知道为什么第二个会起作用吗
sequelize请求如下所示
const devices = await this.database.model('device').findAll({
where: {
typeId: req.params.id,
},
attributes: {
include: [
'id',
[this.database.fn('COUNT', 'records.id'), 'count'],
],
},
include: [{
model: this.database.model('record'),
where: {
date: {
$gt: oneDayAgo,
},
},
attributes: [],
required: false,
}],
group: ['device.id'],
})
SQL在
records.id
周围有单引号,因此SQL正在计算一个字符串值(该值从不为NULL
)。你想要:
SELECT "device"."id", COUNT(records.id) AS "count"
我不知道如何在sequelize中表达这一点,但问题是单引号。在sequelize中最简单的方法是将
'records.id'
传递给this.database.col()
。由此,Sequelize不应该引用标识符
实际上,您应该对传递给Sequelize的每一列使用此函数。通过这样做,Sequelize可以生成更精确的查询。我需要在Sequelize中使用
this.database.col('records','id')
。我会尽快接受答案。
SELECT "device"."id", COUNT(records.id) AS "count"