【问题标题】:How to create dynamic where clause in sequelize query using $or and $and如何使用 $or 和 $and 在 sequelize 查询中创建动态 where 子句
【发布时间】:2019-10-03 18:33:23
【问题描述】:

我正在尝试创建动态 where 子句来使用 sequelize 过滤数据。但我被困在 where 子句中使用“OR”。

我尝试了以下方法来创建动态 where 子句

let where = {};
if(obj.NoteCat)
   where.NoteCat = obj.NoteCat;
if(obj.NoteSubCat)
   where.NoteSubCat = obj.NoteSubCat;
where.NoteEntryDate = {
        [Op.and]: {
            [Op.gte]: obj.FromDate,
            [Op.lte]: obj.ToDate,
        }
};
where.NoteWeekEndingDate = {
        [Op.and]: {
            [Op.gte]: obj.FromDate,
            [Op.lte]: obj.ToDate,
        }
}; 
await table.findAll({
    where: where,
}

我希望在下面给出查询

SELECT *
FROM   table     
WHERE  NoteCat = ''
AND    NoteSubCat  = ''
OR     (NoteEntryDate      >= '2019-05-16 12:52:50.931' AND NoteEntryDate      <= '2019-05-16 12:52:50.931') 
OR     (NoteWeekEndingDate >= '2019-05-16 12:52:50.931' AND NoteWeekEndingDate <= '2019-05-16 12:52:50.931')

但实际输出的是

SELECT *
FROM   table     
WHERE  NoteCat = ''
AND    NoteSubCat  = ''
AND    (NoteEntryDate      >= '2019-05-16 12:52:50.931' AND NoteEntryDate      <= '2019-05-16 12:52:50.931') 
AND    (NoteWeekEndingDate >= '2019-05-16 12:52:50.931' AND NoteWeekEndingDate <= '2019-05-16 12:52:50.931')

我如何得到预期的结果。我已经浪费了一整天。非常感谢这方面的任何帮助。

谢谢。

【问题讨论】:

  • 在顶层使用 $or,如下所示:stackoverflow.com/questions/20695062/…
  • @Anonym 我已经检查了上面的链接,但无法在动态 where 子句中进行调整。你能分享我的where子句的更新版本吗

标签: sql node.js sequelize.js


【解决方案1】:

您可以按相反的顺序创建它,如下所示:

let where = {
  [Op.or]: {
    NoteEntryDate: {
      [Op.and]: {
        [Op.gte]: obj.FromDate,
        [Op.lte]: obj.ToDate,
      }
    },
    NoteWeekEndingDate: {
      [Op.and]: {
        [Op.gte]: obj.FromDate,
        [Op.lte]: obj.ToDate,
      }
    }
  }
};
if(obj.NoteCat)
  where.NoteCat = obj.NoteCat;
if(obj.NoteSubCat)
  where.NoteSubCat = obj.NoteSubCat;
await table.findAll({
  where: where,
}

【讨论】:

  • 非常感谢我的朋友。有时我们并没有开箱即用:)
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 2018-01-08
  • 2021-02-02
相关资源
最近更新 更多