Javascript 同时使用“两个”;及;及;或;在Sequelize js的作用域中

Javascript 同时使用“两个”;及;及;或;在Sequelize js的作用域中,javascript,express,orm,sequelize.js,Javascript,Express,Orm,Sequelize.js,在可爱的Sequelize JS中遇到更多麻烦 我试图将以下查询放入Sequelize范围 SELECT * FROM Projects WHERE isDeleted IS NOT true AND ( ( importSource IS NOT null ) AND ( createdAt BETWEEN '2018-01-19' AND '2018-01-29') OR ( importSource IS null ) AND ( createdAt >

在可爱的Sequelize JS中遇到更多麻烦

我试图将以下查询放入Sequelize范围

SELECT *
FROM Projects
WHERE isDeleted IS NOT true
AND ( 
    ( importSource IS NOT null ) AND ( createdAt BETWEEN '2018-01-19' AND '2018-01-29') 
    OR 
    ( importSource IS null ) AND ( createdAt > '2018-01-19' )
)
在我的模型中,目前尝试此方法无效

scopes: {
  active: {
    where: {
      isDeleted: {
        [Op.not]: true
      },
      [Op.or]: [
        {
          importSource: { [Op.ne]: null },
          createdAt: {
            [Op.between]: [
              new Date(new Date() - 30 * ( 24 * 60 * 60 * 1000)),
              new Date(new Date() - 4 * (24 * 60 * 60 * 1000))
            ],
          }
        },
        {
          importSource: { [Op.eq]: null },
          createdAt: {
            [Op.gt]: new Date(new Date() - 30 * ( 24 * 60 * 60 * 1000)),
          }
        }
      ]
    }
  }
}
没有错误。这就是正在运行的MySQL

Executing (default): SELECT `id`, `url`, `title`, `company`, `importSource`, `importSourceId`, `publishedAt`, `createdAt`, `updatedAt` FROM `Projects` AS `Project` WHERE `Project`.`isDeleted` IS NOT true ORDER BY `Project`.`id` DESC LIMIT 5;
这里是调用模型和作用域的控制器方法

exports.index = (req, res) => {
  const MAX = 50;
  var numberProjects = ((req.query.number) ? req.query.number : MAX);
  numberProjects = ((numberProjects > MAX) ? MAX : numberProjects);

  Project.scope('active').findAll({
    order: [
      ['id', 'DESC']
    ],
    limit: +numberProjects
  })
  .then( projects => {
    res.send( projects );
  })
};

感谢您的帮助。

在询问此问题20分钟后成功解决了此问题

[Op.or]
更改为
$或
似乎有效

scopes: {
  active: {
    where: {
      isDeleted: { [Op.not]: true },
      $or: [
        {
          importSource: { [Op.ne]: null },
          createdAt: {
            [Op.between]: [
              new Date(new Date() - 30 * ( 24 * 60 * 60 * 1000)),
              new Date(new Date() - 4 * (24 * 60 * 60 * 1000))
            ],
          }
        },
        {
          importSource: { [Op.eq]: null },
          createdAt: {
            [Op.gt]: new Date(new Date() - 30 * ( 24 * 60 * 60 * 1000)),
          }
        }
      ]
    }
  }
}

哇-我也有同样的问题,把顶层改成$2或者也为我工作。你知道这是为什么吗?