node.js - 为什么我在 Sequelize 查询中 OR 运算符内的条件 WHERE 被转换为 AND?

标签 node.js sequelize.js

我正在尝试使用带有条件 WHERE 的 Sequelize 进行查询,如此处所述 (How to perform a search with conditional where parameters using Sequelize)。

我的代码相关部分是这样的

    const Op = Sequelize.Op;
    var search = {};
     if (typeof req.query.search !== 'undefined'){
         search.nome = {[Op.like]: '%' + req.query.search + '%'};
         search.username = {[Op.like]: '%' + req.query.search + '%'};
    }
    model.User.findAll({
        where:{
         [Op.or]: [
           search
         ]
      })

它可以工作,但是生成的 SQL 添加了一个 AND 而不是 OR,如下所示:

    SELECT 'id_', 'nome', 'username', 'id' FROM 'User' AS 'User' WHERE (('User'.'nome' LIKE '%test%' AND 'User'.'username' LIKE '%test%'))

我是不是做错了什么我没看到? 我已经尝试了几种组合,但都没有用。

最佳答案

构造的 search 过滤器有问题。 [Op.or] 应该是搜索的传播而不是数组。

尝试如下,

model.User.findAll({
  where: {
    [Op.or]: {
      email: {
        [Op.like]: 'abcd',
      },
      username: {
        [Op.like]: 'cdf',
      },
    }
  },
  logging: console.log,
});

你会得到以下内容,

    SELECT "id", "name", "username" FROM "users" AS "User" WHERE "User"."deleted_at" IS NULL AND ("User"."email" LIKE 'abcd' OR "User"."username" LIKE 'cdf');

关于node.js - 为什么我在 Sequelize 查询中 OR 运算符内的条件 WHERE 被转换为 AND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55564036/

相关文章:

api - 使用新的 Bing API (nodejs)

node.js - 无法在 Heroku 上启动浏览器进程

node.js - 访问时 puppeteer 的截图是否被捕获?

node.js - 如何使用 TypeScript 正确键入 Sequelize JOIN?

node.js - sequelize 获取被引用表的列值

mysql - LEFT() 函数从其中的字符串中提取多个字符

javascript - 如何避免 Sequelize JS 关联包括外键和包含的对象

node.js - Dialogflow v2 NodeJS API ContextsClient

node.js - 使用 Nightwatch 在 headless Safari 中运行 e2e 测试

node.js - 带有长字符串错误的 Sequelize/繁琐的创建/更新记录 : read ECONNRESET