sequelize findAll时提示 Invalid value
如果不使用$like
查询是没问题的,但是业务需要模糊搜索功能。
一旦使用$like
就Invalid value
连接数据库
var sequelize = new Sequelize('data', 'root', 'Root123', {
host: 'localhost',
dialect: 'mysql',
dialectOptions: {
charset: 'utf8mb4'
},
pool: {
max: 5, // 连接池中最大连接数量
min: 0, // 连接池中最小连接数量
idle: 10000 // 如果一个线程 10 秒钟内没有被使用过的话,那么就释放线程
},
operatorsAliases: false,
});
定义模型
var patient = sequelize.define('patient', {
user: Sequelize.TEXT,
sex: Sequelize.STRING,
age: Sequelize.INTEGER,
num: Sequelize.INTEGER,
bed: Sequelize.INTEGER,
department: Sequelize.STRING,
}, {
// 不加会导致出现复数users未找到的错误
freezeTableName: true,
timestamps: false
});
patient.removeAttribute('id')
patient.removeAttribute('createdAt')
patient.removeAttribute('updatedAt')
查询
router.post("/searchPatient", function (req, res, next) {
console.log(req.body.val)
patient.findAll({
where: {
num: {
$gte: 4
}
/* $or: [{
user: req.body.val
},
{
num: req.body.val
}
] */
}
}).then(function (doc) {
if (doc.length != 0) {
console.log(doc)
} else {
// ...
}
}).catch(function (err) {
console.log('错误' + err)
})
});
提示错误Error: Invalid value { '$gte': 4 }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
中文文档看漏了,现在用
const Op = Sequelize.Op;[Op.or]: [{}]
去筛选。。其实你使用原来的
$like
也是可以的。在Sequelize
中 称为操作符的别名
,但是在V4
版本以后新加了符号运算符
来代替了,比如你说的Op.or
,operatorsAliases: false
, 这个配置改成true
,就不会报错了。具体信息查看链接 , 查看
运算符安全性
部分。模糊搜索可以用这个
const Op = Sequelize.Op;
patient.findAll({