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

如何通过Sequelize向MySQL的JSON类型数组字段添加元素?

解决Sequelize向MySQL JSON数组字段添加元素的问题

问题原因

  1. 直接修改dataValues中的数组:Sequelize的变更追踪机制不会识别这种修改,执行save()时不会同步到数据库。
  2. 错误赋值字段:你第二个update代码里误将字符串类型的category_name赋值给数组字段,导致字段被改成字符串。

正确解决方案

方法一:修改实例属性后保存

直接操作模型实例的属性(而非dataValues),让Sequelize检测到字段变化:

// 确保数组存在(若模型已设默认值为[],查询出的实例会自带该数组)
if (!category.array_Of_food) {
  category.array_Of_food = [];
}
category.array_Of_food.push('item1');
await category.save();

方法二:使用Sequelize操作符直接更新(推荐)

无需先查询实例,直接在数据库层面追加元素,效率更高:

  • 适配多数Sequelize版本的写法(用MySQL原生函数):
await Category.update(
  { 
    array_Of_food: Sequelize.fn('JSON_ARRAY_APPEND', Sequelize.col('array_Of_food'), '$', 'item1') 
  },
  { where: { id: categoryId } } // 替换为你的查询条件
);
  • Sequelize v5+ 简洁写法:
await Category.update(
  { array_Of_food: { [Sequelize.Op.push]: 'item1' } },
  { where: { id: categoryId } } // 替换为你的查询条件
);

模型定义校验

确保你的模型中该字段正确配置为JSON类型并设置默认值:

array_Of_food: {
  type: DataTypes.JSON,
  defaultValue: [],
  allowNull: false
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:45:33