在使用帆作为ORM(版本1.0(时,我注意到有一个称为Model.avg
的函数(以及总和(。 - 但是,没有最大或最小功能可以从模型中的列中获取最大或最小功能;因此,看来这不是必需的,因为它已经被其他功能涵盖了吗?
现在,在我的数据库中,我需要在列表中获取"最大ID";我可以使用本机查询:
来适用于postgresqlconst maxnum = await Order.getDatastore().sendNativeQuery('SELECT MAX("orderNr") FROM "order"')
虽然这不是最困难的事情,但这不是我真正想要的:它仅限于基于SQL的数据存储(因此我们将无法轻松移动到MongoDB(;对于另一种SQL数据库类型,语法实际上甚至可能有所不同。
所以我想知道 - 可以以这样的方式对其进行转换,不依赖sendNativeQuery
?
您可以尝试使用指定模型的数据存储器执行.query()
来执行RAW SQL查询,并且如果您想要,您可以尝试pg
,一个用于与PostgreSQL数据库通信的NPM软件包:
Pet.query('SELECT pet.name FROM pet WHERE pet.name = $1', [ 'dog' ]
,function(err, rawResult) {
if (err) { return res.serverError(err); }
sails.log(rawResult);
// (result format depends on the SQL query that was passed in, and
the adapter you're using)
// Then parse the raw result and do whatever you like with it.
return res.ok();
});
您可以使用limit
,order
选项Waterline提供了具有最大值的单个模型(然后只需提取该值(。
const orderModel = await Order.find({
where: {},
select: ['orderNr'],
limit: 1,
sort: 'orderNr DESC'
});
console.log(orderModel.orderNr);
像水线中的大多数事物一样,它可能不如SQL SELECT MAX
查询(或Mongo中的某些等效物(高效,但是它应该允许在没有维护的情况下交换数据库。最后注意,别忘了处理未找到模型的情况。