如何使用knex.js和objection.js在Postgres中查询少于48小时的记录?

时间:2018-03-01 06:08:55

标签: node.js postgresql orm knex.js objection.js

我想使用created_at列查询所有不到48小时的记录。

在PostgreSQL中,您可以执行以下操作:

SELECT * from "media" WHERE updated_at >= now() - '48 hour'::INTERVAL;

我们如何在objection.js / knex.js中编写此内容而无需进入原始查询(或者可能使用某些raw作为部分相等)?

我有工作逻辑:

const { raw } = require('objection');

return SomeModel.query()
  .andWhere(raw('updated_at >= now() - \'48 HOUR\'::INTERVAL'))
  .orderBy('updated_at')
  .first();

但我想尽可能避免使用raw函数,例如:

return SomeModel.query()
  .where('updated_at', '>=', 'i have no idea what to put here')
  .orderBy('updated_at')
  .first();

首先想到,由于updated_atnew Date().toISOString(),我可以按照< new Date(new Date().getTime()-48*60*60*1000).toISOString()

的方式做点什么

但我不完全确定Postgres比较器将如何处理这个问题。

1 个答案:

答案 0 :(得分:2)

const { raw } = require('objection');

SomeModel.query()
  .where('updated_at', '>=', raw(`now() - (?*'1 HOUR'::INTERVAL)`, [48]))
  .orderBy('updated_at')
  .first();

还以一种小时数可以作为值绑定传递的方式编写示例。如果不必更改值,则使用常量now() - '48 HOUR'::INTERVAL也可以。