【问题标题】:How to remove double quotes from Sequelize query?如何从 Sequelize 查询中删除双引号?
【发布时间】:2018-08-02 18:23:28
【问题描述】:

我正在使用带有 Sequelize 的 Node/Express 来查询我的 sqlite 数据库,当尝试查询 JSON 类型的列时,查询中添加了多余的双引号 ("),从而阻止查询返回任何东西。

我使用 Sequelize 进行查询的代码:

sites = await Site.findAll({
  where: {
    [Op.or]: [
      'title', 'site_url', 'tags'
    ].map(key => ({
      [key]: {
        [Op.like]: `%${search}%`
      }
    }))
  }
});

生成的(简化的)查询如下所示:

SELECT * FROM `Sites` AS `Site` WHERE (`Site`.`title` LIKE '%min%'
  OR `Site`.`site_url` LIKE '%min%' OR `Site`.`tags` LIKE '"%min%"');

注意双引号:`Site`.`tags` LIKE '"%min%"'

在没有双引号的情况下进行手动查询时,查询会按预期工作。那么如何使用 Sequelize 删除它们?

【问题讨论】:

  • 您确定没有在应用程序代码中添加双引号
  • 很有可能。虽然该列是 JSON 类型,但我设置的实际数据是一个数组。进行该转换时,JavaScript 会在其中添加双引号吗?

标签: node.js sqlite sequelize.js


【解决方案1】:

能够找到解决此问题的方法。而不是:

[Op.like]: `%${search}%`

只需添加方括号:

[Op.like]: [`%${search}%`]

这样 Sequelize 将在 JSON 中搜索,同时像正常一样搜索其他列类型,例如 varchar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2011-01-08
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多