You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sequelize中查询PostgreSQL数组列包含指定值的行?

在Sequelize中查询PostgreSQL数组字段包含指定元素的记录

针对你需要查询ingredients数组字段包含指定食材的需求,这里提供两种在Sequelize中实现的方法,效果和你给出的原生SQL等价:

方法一:使用原生SQL片段(literal)

这种方式直接复用你熟悉的SQL逻辑,同时通过bind参数避免SQL注入风险:

const targetIngredient = '你要搜索的食材'; // 替换为前端传入的参数
const dishes = await Dish.findAll({
  where: sequelize.literal(`? = ANY(ingredients)`),
  bind: [targetIngredient]
});

不推荐直接拼接字符串(存在注入风险),务必优先使用bind参数传递变量。

方法二:使用Sequelize的Op.contains操作符

Sequelize针对PostgreSQL数组类型提供了Op.contains操作符,它对应PostgreSQL的@>运算符,对于单个元素的查询,效果和=ANY完全一致:

const { Op } = require('sequelize');
const targetIngredient = '你要搜索的食材';

const dishes = await Dish.findAll({
  where: {
    ingredients: {
      [Op.contains]: [targetIngredient]
    }
  }
});

这种写法更符合Sequelize的ORM风格,无需手动拼接SQL,安全性更高。

额外说明

确保你的Dish模型中ingredients字段的定义正确,示例如下:

const { DataTypes } = require('sequelize');

const Dish = sequelize.define('Dish', {
  ingredients: {
    type: DataTypes.ARRAY(DataTypes.STRING),
    allowNull: false
  },
  // 其他模型字段...
});

内容的提问来源于stack exchange,提问作者Juan Andrés Macri Ibañez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:13:18