如何在sequelize中执行位操作
How to execute a bit operation in sequelize
我正在尝试在 sequelize 中使用按位运算符创建 where 子句。
假设我有一组建筑物,每个建筑物都有一个由按位运算符确定的功能。
按位定义为
- 1 = 学校,(二进制 0001)
- 2 = 教堂,(二进制 0010)
- 4 = 医院,(二进制 0100)
同时也是教堂的学校按位为“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)
)
})
下找到这些功能
我正在尝试在 sequelize 中使用按位运算符创建 where 子句。
假设我有一组建筑物,每个建筑物都有一个由按位运算符确定的功能。
按位定义为
- 1 = 学校,(二进制 0001)
- 2 = 教堂,(二进制 0010)
- 4 = 医院,(二进制 0100)
同时也是教堂的学校按位为“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)
)
})
下找到这些功能