Sequelize - 多条件查询

时间:2017-03-11 04:21:32

标签: sequelize.js

我使用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)
});

但这与我目前的情况并没有什么不同。

1 个答案:

答案 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 } }
    )
})