使用sails作为ORM(版本1.0)时,我注意到有一个名为Model.avg
的函数(以及sum)。 - 但是,没有最大或最小函数来从模型中的列获得最大值或最小值;所以这似乎没有必要,因为它已经被其他功能覆盖了?
现在在我的数据库中,我需要获得"最大ID"列表中;我使用本机查询使用 for postgresql :
const maxnum = await Order.getDatastore().sendNativeQuery('SELECT MAX(\"orderNr\") FROM \"order\"')
虽然这不是最困难的事情,但这并不是我真正想要的:它仅限于基于sql的数据存储(因此我们无法轻易地移动到mongodb);对于另一个sql数据库类型,语法实际上可能会有所不同。
所以我想知道 - 这可以通过它不依赖于sendNativeQuery
的方式进行转换吗?
答案 0 :(得分:0)
您可以尝试.query()
使用指定模型的数据存储区执行原始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();
});
答案 1 :(得分:0)
您可以使用水线提供的limit
和order
选项来获取具有最大值的单个模型(然后只提取该值)。
const orderModel = await Order.find({
where: {},
select: ['orderNr'],
limit: 1,
sort: 'orderNr DESC'
});
console.log(orderModel.orderNr);
与Waterline中的大多数内容一样,它可能不如SQL SELECT MAX
查询(或mongo中的某些等效查询)有效,但它应该允许交换数据库而无需维护。最后请注意,不要忘记处理没有找到模型的情况。