эффективный способ написать сложное, где условие - PullRequest
0 голосов
/ 19 марта 2020

В SQL мы могли бы получить следующий список по этому запросу:

SELECT * FROM Videos WHERE resource = 'youtube' AND isDeleted = false 

AND (lastRefreshed IS NULL OR lastRefreshed BETWEEN '2017-01-15' AND '2017-01-22')

В обратной связи JS Мне пришлось повторить некоторую часть условия для каждой части или секции ИЛИ. В этой ситуации, если мне нужно изменить значение isDeleted в условии, мне нужно сделать это дважды, в то время как в операторе SQL я могу изменить его только в одном месте.

    async function doRefresh() {
    const { Video } = app.models;
    const result = await Video.find({
      where: {
        or: [
          {
            resource: 'youtube',
            isDeleted: false,
            lastRefreshed: { "eq": null }
          },
          {
            resource: 'youtube',
            isDeleted: false,
            lastRefreshed: {
              between: ['2017-01-15', '2017-01-22']
            }
          }
        ]
      }      
    });


    console.log(result);
  }

Есть ли лучший способ написать условие для обратной петли JS?

Я нашел следующую опцию, я предполагаю, что есть лучший способ:

async function doRefresh() {
    const { Video } = app.models;

    const whereBasicCondition = {
      resource: 'youtube',
      isDeleted: false
  };

    const result = await Video.find({
      where: {
        or: [
          {
            ...whereBasicCondition,
            lastRefreshed: { "eq": null }
          },
          {
            ...whereBasicCondition,
            lastRefreshed: {
              between: ['2017-01-15', '2017-01-22']
            }
          }
        ]
      }      
    });


    console.log(result);
  }
...