【问题标题】:How to execute a bit operation in sequelize如何在sequelize中执行位操作
【发布时间】:2016-11-02 14:42:30
【问题描述】:

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

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

按位定义

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

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

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

在 SQL 中,查询类似于

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

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

在续集中我认为它类似于

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

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

【问题讨论】:

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


    【解决方案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/下找到这些函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      相关资源
      最近更新 更多