Sequelize复杂的And/OR查询

4

我想在Sequelize中编写类似于这样的语句。

Select * from table WHERE completed = 0 AND tracking = 1 AND ((FromNumber = +15625554444 AND ToNumber = +17145554444) OR (FromNumber = +17145554444 AND ToNumber = +15625554444))

我该如何在Sequelize中执行此查询?我查看了文档,但非常困惑,并且在尝试过程中一直遇到奇怪的查询。

我目前的代码尝试是这样的,但它没有意义,因为它现在无法正常工作。 我不确定这种AND / Or方案的语法应该是什么样子。

var setNumberData = await models["texts"].findOne({
    where: {
      completed: 0,
      agentNumber: agentData.number,
      trackingNumber: obj.To,
      [Op.and]: [
        {to: realTo},
        {[Op.or] : [{from: agentData.number}]}
      ],
      // [Op.and]: [{to: obj.To}],
      // [Op.or]: [{from: obj.To}],
      // [Op.and]: [{to: obj.From}]
    }
  });
1个回答

13

我明白了!关键在于方括号就像是该问题中条件的括号。

   var setNumberData = await models["texts"].findOne({
    where: {
      completed: 0,
      agentNumber: agentData.number,
      trackingNumber: obj.To,
      [Op.or]: [
        {[Op.and] : [
          {from: obj.From},
          {to: realTo}
        ]},
        {[Op.and] : [
          {from: realTo},
          {to: obj.From}
        ]}
      ]
    }
  });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接