为了账号安全,请及时绑定邮箱和手机立即绑定

节点Js将原始查询更改为纬度和经度的ORM

节点Js将原始查询更改为纬度和经度的ORM

qq_遁去的一_1 2021-05-12 13:15:12
我试图隐瞒我对sequelize的原始查询ORM,但没有得到正确的结果。这是我的原始查询var query = "SELECT ( 3959 * acos( cos( radians('40.892389') ) * cos( radians( c.shopLatitude ) ) * cos( radians( c.shopLongitude ) - radians('-74.258633') ) + sin( radians('40.892389') ) * sin(radians(shopLatitude)) ) ) AS distance FROM cubbers c HAVING distance < 20 ORDER BY distance ASC";db.sequelize.query(query, { type: sequelize.QueryTypes.SELECT} ).then(dataList=>{    res.send(dataList)}).catch(error=>{    res.send('error')});ORM:CubbersShopsData.findOne({    where: { cubbersId: data.cubbersId },    include: [ CubbersAvailability ],    attributes: [[sequelize.literal("3959 * acos(cos(radians("+shopLatitude+")) * cos(radians(shopLatitude)) * cos(radians("+shopLongitude+") - radians(shopLongitude)) + sin(radians("+shopLatitude+")) * sin(radians(shopLatitude)))"),'distance']],    logging: console.log}).then(dataList=>{    res.send(dataList)}).catch(error=>{    res.send('error')});在我的ORM代码中,我想添加orderBy和having。如果正在添加,order:['distance', 'ASC'],则显示此错误Unknown column 'cubbers.distance' in 'order clause
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

不幸的是,sequelize在have和order子句中使用别名存在一些问题。因此,sequelize.literal在这种情况下我总是使用方法。


CubbersShopsData.findOne({

    where: { cubbersId: data.cubbersId },

    include: [ CubbersAvailability ],

    attributes: [[sequelize.literal("3959 * acos(cos(radians("+shopLatitude+")) * cos(radians(shopLatitude)) * cos(radians("+shopLongitude+") - radians(shopLongitude)) + sin(radians("+shopLatitude+")) * sin(radians(shopLatitude)))"),'distance']],

    having: sequelize.literal('distance < 20'),

    order: sequelize.literal('distance ASC'),

    logging: console.log

}).then(dataList=>{

    res.send(dataList)

}).catch(error=>{

    res.send('error')

});


查看完整回答
反对 回复 2021-05-27
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信