如何使用 knex.js 和 objection.js 在 Postgres 中查询小于 48 小时的记录?
How to query for records less than 48 hours in Postgres using knex.js and objection.js?
我想使用 created_at
列查询所有小于 48 小时的记录。
在 PostgreSQL 中,您可以执行以下操作:
SELECT * from "media" WHERE updated_at >= now() - '48 hour'::INTERVAL;
我们如何在 objection.js/knex.js 中写这个而不进入原始查询(或者可能使用一些原始的部分相等性)?
我有工作逻辑:
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_at
是一个 new Date().toISOString()
,我也许可以按照 < new Date(new Date().getTime()-48*60*60*1000).toISOString()
的方式做一些事情
但我不完全确定 Postgres 比较器将如何处理这个问题。
const { raw } = require('objection');
SomeModel.query()
.where('updated_at', '>=', raw(`now() - (?*'1 HOUR'::INTERVAL)`, [48]))
.orderBy('updated_at')
.first();
还编写了可以将小时数作为值绑定传递的示例。如果不必更改值,则使用常量 now() - '48 HOUR'::INTERVAL
也可以。
我想使用 created_at
列查询所有小于 48 小时的记录。
在 PostgreSQL 中,您可以执行以下操作:
SELECT * from "media" WHERE updated_at >= now() - '48 hour'::INTERVAL;
我们如何在 objection.js/knex.js 中写这个而不进入原始查询(或者可能使用一些原始的部分相等性)?
我有工作逻辑:
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_at
是一个 new Date().toISOString()
,我也许可以按照 < new Date(new Date().getTime()-48*60*60*1000).toISOString()
但我不完全确定 Postgres 比较器将如何处理这个问题。
const { raw } = require('objection');
SomeModel.query()
.where('updated_at', '>=', raw(`now() - (?*'1 HOUR'::INTERVAL)`, [48]))
.orderBy('updated_at')
.first();
还编写了可以将小时数作为值绑定传递的示例。如果不必更改值,则使用常量 now() - '48 HOUR'::INTERVAL
也可以。