我正在使用NodeJS,BookshelfJS和ExpressJS开展项目。 我的数据库是Postgres,安装了Postgis。 我的桌子'组织'有一个' lat_lon'几何列。 我想查询特定纬度/长点的固定半径内的所有组织。 我试过这样的事情:
var organizations = await Organization.query(function (qb) {
qb.where('ST_DWithin(lat_lon, ST_GeomFromText("POINT(45.43 10.99)", 4326), 1000 )')
}).fetchAll()
以及更多组合,但它不起作用。 它给我一个错误
UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):TypeError:运算符" undefined"不允许
似乎期待操作员处于何处,但我已经开始研究' lat_lon'列。
我该如何解决? 感谢
答案 0 :(得分:0)
您是否尝试过使用knex.raw()?
var organizations = await Organization.query(function (qb) {
qb.where(knex.raw('ST_DWithin(lat_lon, ST_GeomFromText("POINT(45.43 10.99)", 4326), 1000 )'))
}).fetchAll()
答案 1 :(得分:0)
我发现whereRaw
是遇到类似情况时正在寻找的解决方案。
如果我们使用where
qb.where('id', 2')
相当于whereRaw
的
qb.whereRaw('id = ?', [2])
我相信这与您的查询大致相同
qb.whereRaw('ST_DWithin(lat_lon, ST_GeomFromText("POINT(45.43 10.99)", 4326), 1000 )')
可以将其参数化为
qb.whereRaw(
'ST_DWithin(lat_lon, ST_GeomFromText("POINT(?, ?)", 4326), ?)',
[45.43, 10.99, 1000]
)
如果经度,纬度或搜索半径要更改。