Node.js 在eggjs模型的“findAll”函数中使用“Op.notLike”时,如何避免转义字符\?

Node.js 在eggjs模型的“findAll”函数中使用“Op.notLike”时,如何避免转义字符\?,node.js,sequelize.js,Node.js,Sequelize.js,我有这个密码 异步getHisDataByTimestartTime、endTime、ids{ console.loggetHisDataByTime>>,开始时间,结束时间,ID const Op=this.ctx.app.Sequelize.Op; const dataHis=等待this.ctx.model.dataHis.findAll{ 其中:{ 设备id:{[Op.in]:ids}, 日期时间:{ [作品gte]:开始时间, [Op.lte]:结束时间 }, 数据:{ [Op.not

我有这个密码

异步getHisDataByTimestartTime、endTime、ids{ console.loggetHisDataByTime>>,开始时间,结束时间,ID const Op=this.ctx.app.Sequelize.Op; const dataHis=等待this.ctx.model.dataHis.findAll{ 其中:{ 设备id:{[Op.in]:ids}, 日期时间:{ [作品gte]:开始时间, [Op.lte]:结束时间 }, 数据:{ [Op.notLike]:“%valid%”, } }, //组:['device_id'], 订单:['datetime']], 属性:['device_id','datetime','data'] }; 返回数据HIS; } 这将生成以下sql命令:

SELECT `device_id`, `datetime`, `data` FROM `data_his` AS `datahis` 
WHERE `datahis`.`device_id` IN ('2019083107100024', '2020010303100002') 
  AND (`datahis`.`datetime` >= '2019-09-23 00:00:00' 
  AND `datahis`.`datetime` <= '2019-09-24 23:00:00') 
  AND `datahis`.`data` NOT LIKE '\"%valid%\"' 
ORDER BY `datahis`.`datetime`;
我期望的是“%valid%”,但实际得到的是“\%valid%\”。转义字符\将自动显示,mysql命令执行如下操作:

所以,Op.notLike在这种情况下根本不起作用

删除转义字符\并在Navicat中执行后,结果正是我想要的:

但是我如何避免在findAll中使用转义字符\来解决这个问题呢?我已经将我的代码与下面的官方示例进行了比较,但是没有用。


到目前为止,还不知道是什么导致了转义字符,但这里有两种解决方案

 1. public async query(sql: string, options: object): Promise using
 2. JSON_CONTAINS_PATH to check the key of data
解决方案2的代码:

async getHisDataByTime(startTime, endTime, ids) {
        console.log("getHisDataByTime >>", startTime, endTime, ids)
        const { Op } = this.app.Sequelize;
        let validFn =  this.app.Sequelize.fn("JSON_CONTAINS_PATH", this.app.Sequelize.col("data"), 'one', '$.valid');
        const dataHis = await this.ctx.model.Datahis.findAll({
          where: {
            [Op.and]: [
              { device_id: { [Op.in]: ids } },
              {
                datetime: {
                  [Op.gte]: startTime,
                  [Op.lte]: endTime
                }
              },
              this.app.Sequelize.where(validFn, 0)
            ]
          },
          //group:['device_id'],
          order: [['datetime']],
          attributes: ['device_id', 'datetime', 'data']
        });
    
        return dataHis;
      }

我怀疑**'%valid%'**在您的代码中实际上是'%valid%',而您只是在这里强调它?您能包含准确的未编辑代码吗?我猜这是某种变量替换。是的,谢谢,derpirscher。我已经修改了我的post@derpirscherhey,doublesharp,我已经重新整理了帖子中的代码,现在没有修改。“%valid%”刚刚字符串,而不是变量。考虑到敏感词的情况,我将“%valid%”更改为“%test%”或其他,但是转义字符的显示方式相同。@doublesharp