Sequelize - 多条件查询

skw*_*eth 0 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
        )
    })
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)

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

pio*_*ias 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 }
    }
})
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)