多个notLike不起作用

时间:2016-12-28 17:24:17

标签: javascript sequelize.js

我有以下sequelize查询片段,我喜欢做多个notLike查询:

article
    .findAndCountAll({
      where: {
        NAME: {
          $like: '%'+req.body.search+'%'
        },
        ITEM_NUMBER: {
               $notLike: 'MF%',
               $notLike: 'OLS%',
               $notLike: 'MV%',
               $notLike: 'MD%',
               $notLike: 'AE%'
         },
         PRICE: {
           $gt: 0
         },
         BLOCKED_FROM: {
           $or: {
             $gt: new Date(),
             $eq: null
           }
         }
       },
      limit: 20
     })
    .then(function(result) {
      res.json(result.rows);
      //res.json(result.count);
      console.log(result.count);
      console.log(result.rows);
    });

问题是ITEM_NUMBER的where部分只接缝查询中的最后一条notLike行($ notLike:'AE%')。生成的查询输出显示:

  

SELECT TOP 20 [NAME],[ITEM_NUMBER],[PRICE],[BLOCKED_FROM] FROM [ARTIKEL] AS [ARTIKEL] WHERE [ARTIKEL]。[NAME] LIKE N'%testname%'AND [ARTIKEL]。[ ITEM_NUMBER]不喜欢N'AE%'和[ARTIKEL]。[价格]> 0 AND([ARTIKEL]。[BLOCKED_FROM]> N'2016-12-28 17:05:58.750'或[ARTIKEL]。[BLOCKED_FROM]为空);

查询应包含所有%notLike参数。有什么想法错了吗? 谢谢 INGO

2 个答案:

答案 0 :(得分:0)

当在数组中使用相同的键时,只取一个然后,尝试替换如下:

article
.findAndCountAll({
  where: {
    NAME: {
      $like: '%'+req.body.search+'%'
    },
    ITEM_NUMBER: {
           $notLike: { $any: ['MF%','OLS%','MV%','MD%','AE%']}
     },
     PRICE: {
       $gt: 0
     },
     BLOCKED_FROM: {
       $or: {
         $gt: new Date(),
         $eq: null
       }
     }
   },
  limit: 20
 })
.then(function(result) {
  res.json(result.rows);
  //res.json(result.count);
  console.log(result.count);
  console.log(result.rows);
});

Operator of where http://docs.sequelizejs.com/en/latest/docs/querying/?highlight= $ notLike

答案 1 :(得分:0)

试一试:

    ...
    ITEM_NUMBER: {
        $or: [{
           $notLike: 'MF%'
        }, {
           $notLike: 'OLS%'
        }, {
           $notLike: 'MV%'
        }, {
           $notLike: 'MD%'
        }, {
           $notLike: 'AE%'
        }]
    },
    ...