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

Sequelize中查询数组对象的name字段?Where子句写法咨询

在Sequelize中查询数组所有元素的name字段

要实现对数组所有索引元素的name字段查询,核心是利用数据库的JSON数组查询能力,结合Sequelize的操作符或原生函数调用,以下是不同数据库的具体实现:

PostgreSQL(JSONB字段类型)

如果你的a字段是JSONB类型,直接使用Op.contains操作符即可,它会检查数组中是否存在至少一个匹配name值的元素:

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

// 查询a数组中任意元素name为'test'的数据
Model.findAll({
  where: {
    a: {
      [Op.contains]: [{ name: 'test' }]
    }
  }
});

MySQL(JSON字段类型)

MySQL需要借助JSON_SEARCH原生函数来查找数组中匹配的元素,通过Sequelize的fn和col方法调用:

const { Op, fn, col } = require('sequelize');

// 查询a数组中任意元素name为'test'的数据
Model.findAll({
  where: {
    // JSON_SEARCH返回匹配路径,非空即存在符合条件的元素
    [Op.not]: fn('JSON_SEARCH', col('a'), 'one', 'test', null, '$[*].name')
  }
});

注意事项

  • 确保字段类型为JSON/JSONB,若存储的是字符串格式的JSON,需要先转换为对应类型再查询。
  • 不同数据库的JSON操作语法存在差异,需根据实际使用的数据库调整代码。

内容的提问来源于stack exchange,提问作者Mihran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:33:26