我正在尝试向节点Sequelize findAll添加where like子句,使其行为类似于select * from myData where name like '%Bob%'具有以下代码的sql查询
let data: Array<any> = await MyDataSequelizeAccess.findAll({
where: {
name: {
$like: `%Bob%`
}
}
});
Run Code Online (Sandbox Code Playgroud)
哪个返回以下错误
无效的值{'$ like':'%Bob%'}
如何在续集对象上执行那种通配符或类似位置的类型?
let data: Array<any> = await MyDataSequelizeAccess.findAll({
where: {
name: `Bob`
}
});
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作,但是我无法使通配符起作用。
更新仍然没有骰子-根据https://sequelize.readthedocs.io/en/latest/docs/querying/#operators我的语法看起来正确
我也在尝试(失败)用$ not做同样的事情
let data: Array<any> = await MyDataSequelizeAccess.findAll({
where: {
name: {
$not: `Bob`
}
}
});
Run Code Online (Sandbox Code Playgroud)
并得到与上述相同的错误 Invalid value { '$not': '%Bob%' }
字符串运算符(例如$operator)在Sequelize [1]的 V5中是遗留的。您仍然可以使用传统方式对运算符执行查询,但是必须使用运算符的别名来建立连接(对此将有弃用警告)。[2]
const Op = Sequelize.Op;
const operatorsAliases = {
$like: Op.like,
$not: Op.not
}
const connection = new Sequelize(db, user, pass, { operatorsAliases })
[Op.like]: '%Bob%' // LIKE '%Bob%'
$like: '%Bob%' // same as using Op.like (LIKE '%Bob%')
Run Code Online (Sandbox Code Playgroud)
的更新文档Sequelize.js提供了Sequelize.Op模块中的运算符作为Symbol运算符。[3]
默认情况下,Sequelize使用Symbol运算符以最小化在查询中注入运算符的风险;建议继续使用Symbol运算符。[4]
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
let data: Array<any> = await MyDataSequelizeAccess.findAll({
where: {
name: {
[Op.like]: '%Bob%'
}
}
});
Run Code Online (Sandbox Code Playgroud)
Express 续集首先导入 Express 并污染 Op,如下所示:
const Sequelize = require("sequelize");
const Op = Sequelize.Op;
const { search } = await req.body;
Run Code Online (Sandbox Code Playgroud)
这样做就像这样:
const users = await User.findAll({
where: {
username: { [Op.like]: `%${search}%` },
},
include: [{ model: Tweet, as: "Tweets" }],
raw: true,
}).catch(errorHandler);
Run Code Online (Sandbox Code Playgroud)
我们可以使用运算符 [Op.substring] 而不是 [Op.like],这样我们就不必附加“%”符号。
await Model.findAll({
where: {
name: { [Op.substring]: "bob" }
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4072 次 |
| 最近记录: |