我有以下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
答案 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%'
}]
},
...