sequelize findAll时提示 Invalid value

发布于 2022-09-06 06:19:57 字数 1408 浏览 11 评论 0

如果不使用$like查询是没问题的,但是业务需要模糊搜索功能。
一旦使用$likeInvalid 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冰火雁神 2022-09-13 06:19:57

中文文档看漏了,现在用const Op = Sequelize.Op;[Op.or]: [{}]去筛选。。

土豪 2022-09-13 06:19:57

其实你使用原来的 $like 也是可以的。在Sequelize中 称为操作符的别名,但是在V4版本以后新加了符号运算符来代替了,比如你说的Op.or , operatorsAliases: false, 这个配置改成true,就不会报错了。

具体信息查看链接 , 查看运算符安全性部分。

本宫微胖 2022-09-13 06:19:57

模糊搜索可以用这个
const Op = Sequelize.Op;
patient.findAll({

where: {
  num: {
    [Op.like]: `%${name}%`
  }
  
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文