2016-11-02 11 views
0

sequelizeでビット演算子を使用してwhere句を作成しようとしています。sequelizeでビット操作を実行する方法

建物の集合を持っていると仮定すると、それぞれはビット演算子によって決定される関数を持ちます。

ビット単位定義さ

  • 1 =学校、(バイナリ0001)
  • 2 =教会、(0010バイナリ)
  • 4 =病院、(バイナリ0100)

A教会でもある学校はビット単位では「3」、バイナリでは0011となります。

教育病院は学校と病院の両方であり、ビット単位ではバイナリで5,0101になります。

SQLでクエリが

SELECT id, bitwise FROM buildings WHERE bitwise & 1 = 0;

のようなものが学校であるすべての建物を返すべきだろう。 sequelizeで

私は

const { data } = await Bulding.findAll({ 
    attributes:['id','bitwise'], 
    where: { 
    bitwise: & 1, 
    }, 
}); 

のようなその何かを考えるしかし、私はそのない私が見つけることができるドキュメントのように実際の操作を行う方法がわからないと思います。

答えて

1

これはsequelizeの著者によってhttps://github.com/sequelize/sequelize/issues/5207から取られましたが、サンプルに適合しています。ここでSequelizeはSequelizeシングルトンであり、作成するインスタンスではないことに注意してください。

Building.findAll({ 
    attributes: ['id', 'bitwise'], 
    where: Sequelize.where(Sequelize.literal('bitwise & 1'), '!=', 0) 
}) 

あなたが複数のビット単位の比較をしたい場合は、追加の例として、あなたがオファーをsequelize比較関数を使用することができます。

Building.findAll({ 
    attributes: ['id', 'bitwise'], 
    where: Sequelize.and(
     Sequelize.where(Sequelize.literal('bitwise & 2'), '!=', 0), 
     Sequelize.where(Sequelize.literal('bitwise & 4'), '=', 0) 
    ) 
}) 

あなたはhttp://docs.sequelizejs.com/en/v3/api/sequelize/

の下でこれらの機能を見つけることができます
関連する問題