如何在sequelize中执行位操作

时间:2016-11-02 14:42:31

标签: mysql node.js sequelize.js bitwise-operators

我试图在sequelize中使用按位运算符创建一个where子句。

假设我有一组建筑物,每个建筑物都有一个由按位运算符确定的函数。

按位定义

  • 1 =学校,(二进制0001)
  • 2 =教堂,(Binary 0010)
  • 4 =医院,(Binary 0100)

一个同样是教会的学校对于按位,为二进制的0011将是'3'。

教学医院既是学校也是医院,按字母顺序为5,0101二进制。

在SQL中,查询类似于

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

应归还所有学校的建筑物。

在续集中,我认为它类似于

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

但我不确定如何进行实际操作,因为它不在我能找到的文档中。

1 个答案:

答案 0 :(得分:1)

这是由续集的作者从https://github.com/sequelize/sequelize/issues/5207获取的,但适用于您的样本。请注意,Sequelize这里是Sequelize单例,而不是您创建的实例。

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

作为另一个例子,如果你想要多个按位比较,你可以使用续集提供的比较函数:

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/

下找到这些功能