如何最好地使用bookshelf.js最好使用SQL别名



project stack:express.js,mysql,bookshelf.js

我在bookshelf.js中有一个称为请求的模型。这些请求具有经度和纬度。使用此模型的方法具有经度和纬度。我想对最接近给定的坐标集的50个请求进行查询。因此,如果我在mySQL语句中这样做,我会使用一个看起来像这样的查询。

var longitude = ... 
var latitude = ...
"SELECT * FROM REQUESTS" +     
"WHERE STATE_OF_REQUEST = 'unfulfilled'" +
"ORDER BY SQRT(POW(" + longitude + " - LONGITUDE, 2) + POW(" + latitude + " - LATITUDE, 2))" 

但是,我不想使用SQL语句来执行此操作。我宁愿使用ORM bookshelf.js。

http://bookshelfjs.org

所以我想知道是否有人帮助我提出一些干净的代码来做到这一点。

Request.query(( queryItem) => {
                queryItem.limit(max);
                queryItem.where('STATE_OF_REQUEST', 'unfulfilled');
                queryItem.orderBy("SQRT(POW(" + response[0].location.lng + " - LONGITUDE, 2) + POW(" + response[0].location.lat + "- LATITUDE , 2))");
            }).fetchAll().then((models) => {
                return callBack ({
                    success: true,
                    data: models,
                });
            });

此代码带有此错误?

Unhandled rejection Error: ER_BAD_FIELD_ERROR: Unknown column 'SQRT(POW(-93.0331135 - LONGITUDE, 2) + POW(41.70712109999999- LATITUDE , 2))' in 'order clause'

使用knex:

的使用.order.orderbyraw((
queryItem.orderByRaw("SQRT(POW(" + response[0].location.lng +
  " - LONGITUDE, 2) + POW(" + response[0].location.lat +
  "- LATITUDE , 2))");

在这种情况下,您并不完全使用书架,而是访问直接使用的查询引擎。这样,您可以访问KNEX暴露的所有方法,因此每当您在书架中使用.query.where时,都应参考KNEX的文档。

相关内容

  • 没有找到相关文章

最新更新