Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如果没有值,为什么postgres(带有sequelize)计数为1?_Node.js_Postgresql_Sequelize.js - Fatal编程技术网

Node.js 如果没有值,为什么postgres(带有sequelize)计数为1?

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

我使用sequelize来计算设备在过去24小时内收到的消息数

Sequelize将执行以下请求(我在末尾附加了Sequelize代码)

哪个回报

id   count
24  25790
163 1
95  1
id
24
的值正确,但其他值应为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"