2017-03-11 37 views
0

私はSequelizeを使用してPostGISデータベースを照会し、地理的近接度に基づいてユーザーレコードを返します。現在のユーザーを検索結果から除外したいが、この特定の種類の検索に複数の条件を追加するための適切な構文がわからない。Sequelize - 複数条件のクエリ

現状では、クエリは、私は一例でSequelizeドキュメントに何かを見つけることができませんでした

where: { 
    UserId: { 
     $not: currentUser.id 
    } 
} 

を追加したい

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

です...最も近い私は得られたのは

Post.findAll({ 
    where: sequelize.where(sequelize.fn('char_length', sequelize.col('status')), 6) 
}); 

ですが、これは私の現在の状況とはまったく異なりません。

答えて

1

あなたはwhereオブジェクト内のいくつかの属性にmodels.sequelize.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 } 
    } 
}) 

それとも、ANDクエリ

を構築するために sequelize.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 } } 
    ) 
}) 
+0

これは完璧です、ご協力いただきありがとうございます! – skwidbreth