在帆/水线中,以数据库不可知的方式获得一列的最大值



在使用帆作为ORM(版本1.0(时,我注意到有一个称为Model.avg的函数(以及总和(。 - 但是,没有最大或最小功能可以从模型中的列中获取最大或最小功能;因此,看来这不是必需的,因为它已经被其他功能涵盖了吗?

现在,在我的数据库中,我需要在列表中获取"最大ID";我可以使用本机查询:

来适用于postgresql
const 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();
});

您可以使用limitorder选项Waterline提供了具有最大值的单个模型(然后只需提取该值(。

const orderModel = await Order.find({
    where: {},
    select: ['orderNr'],
    limit: 1,
    sort: 'orderNr DESC'
});
console.log(orderModel.orderNr);

像水线中的大多数事物一样,它可能不如SQL SELECT MAX查询(或Mongo中的某些等效物(高效,但是它应该允许在没有维护的情况下交换数据库。最后注意,别忘了处理未找到模型的情况。