Как использовать несколько $ или в sequelize - PullRequest
0 голосов
/ 19 апреля 2019

Я пишу запрос, где мне нужно несколько операторов 'или'.

это мой whereClause:

{
  date_added: {
    '$lte': '2019-04-18', '$gte': '2019-04-11'
  },
  '$or': [ 
    { id: [Array], secondary_id:[Array] }
  ],
  '$and': [ 
    { third_id: [Array], fourth_id:[Array] }
  ],///make it into $or
}

такой, что там где утверждения изменяются от

WHERE ("date_added" <= '2019-04-18' AND "date_added" >= '2019-04-11') 
  AND ("id" IN ('10') or "secondary_id" in ('11')) 
  AND ("third_id" IN ('12') and "fourth_id" in ('13')) 

INTO

WHERE ("date_added" <= '2019-04-18' AND "date_added" >= '2019-04-11') 
  AND ("id" IN ('10') or "secondary_id" in ('11')) 
  AND ("third_id" IN ('12') OR "fourth_id" in ('13')) 

Другой способ сказать, как я мог бы использовать sequelize для выполнения (A или B) и (C или D)

1 Ответ

0 голосов
/ 19 апреля 2019

Вы должны использовать символы оператора Sequelize , а не строковые значения в вашем примере, они устарели. Чтобы воссоздать запрос в вашем SQL, вам нужно сделать что-то вроде следующего:

const Op = Sequelize.Op

where: {
  date_added: {
    [Op.between]: ['2019-04-18', '2019-04-11'],
  },
  id: {
    [Op.in]: arrayOfIds,
  }
  [Op.or]: [
    {
      channel_type: {
        [Op.like]: {
          [Op.any]: ['facebook', 'instagram'],
        },
      },
    },
  ],
}

SQL

WHERE date_added BETWEEN '2019-04-18' AND '2019-04-11'
  AND id IN (... your id array)
  AND (
    channel_type LIKE 'facebook'
    OR channel_type LIKE 'instagram'
  )
...