我使用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
)
})
我想添加
where: {
UserId: {
$not: currentUser.id
}
}
我在Sequelize文档中找不到任何例子......我得到的最接近的是
Post.findAll({
where: sequelize.where(sequelize.fn('char_length', sequelize.col('status')), 6)
});
但这与我目前的情况并没有什么不同。
答案 0 :(得分:6)
您可以将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 }
}
})
或者您可以使用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 } }
)
})