我正在使用Sequelize查询PostGIS数据库并根据地理位置接近返回用户记录.我想从搜索结果中排除当前用户,但我无法弄清楚为这种特定类型的搜索添加多个条件的正确语法.
就目前而言,查询是
models.Geometry.findAll({
where: models.sequelize.where(
models.sequelize.fn(
'ST_Distance_Sphere',
models.sequelize.col('the_geom'),
models.sequelize.fn(
'ST_GEOMFROMTEXT',
'POINT(' + row.dataValues.longitude + ' ' + row.dataValues.latitude + ')', 4326
)
),
'<=',
radius
)
})
Run Code Online (Sandbox Code Playgroud)
我想补充一下
where: {
UserId: {
$not: currentUser.id
}
}
Run Code Online (Sandbox Code Playgroud)
我在Sequelize文档中找不到任何一个例子......我得到的最接近的是
Post.findAll({
where: sequelize.where(sequelize.fn('char_length', sequelize.col('status')), 6)
});
Run Code Online (Sandbox Code Playgroud)
但这与我目前的情况并没有什么不同.
您可以将models.sequelize.where函数值分配给where对象中的某个属性- 此属性不会用作查找字段
models.Geometry.findAll({
where: {
stDistanceSphere: models.sequelize.where(
models.sequelize.fn(
'ST_Distance_Sphere',
models.sequelize.col('the_geom'),
models.sequelize.fn(
'ST_GEOMFROMTEXT',
'POINT(' + row.dataValues.longitude + ' ' + row.dataValues.latitude + ')', 4326
)
),
'<=',
radius
),
UserId: { $not: currentUser.id }
}
})
Run Code Online (Sandbox Code Playgroud)
或者您可以使用该sequelize.and()函数构造AND查询
models.Geometry.findAll({
where: models.sequelize.and(
models.sequelize.where(
models.sequelize.fn(
'ST_Distance_Sphere',
models.sequelize.col('the_geom'),
models.sequelize.fn(
'ST_GEOMFROMTEXT',
'POINT(' + row.dataValues.longitude + ' ' + row.dataValues.latitude + ')', 4326
)
),
'<=',
radius
),
{ UserId: { $not: currentUser.id } }
)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1383 次 |
| 最近记录: |