如何在sequelize中执行位操作

How to execute a bit operation in sequelize

我正在尝试在 sequelize 中使用按位运算符创建 where 子句。

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

按位定义为

同时也是教堂的学校按位为“3”,二进制为 0011。

教学医院既是学校又是医院,按位为5,二进制为0101。

在 SQL 中,查询类似于

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

应该return所有建筑物都是学校。

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

const { data } = await Bulding.findAll({
   attributes:['id','bitwise'],
   where: {
     bitwise: & 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/

下找到这些功能