mysql JSON_ARRAY_APPEND在使用NodeJs进行sequelize时

jhkqcmku  于 11个月前  发布在  Mysql
关注(0)|答案(2)|浏览(115)

我正在尝试更新MySQL的JSON列(比如history)。我有一个这样的对象:
{statue: 'pending', date: 'current_date'}
在使用MODEL.update({history: {statue: 'pending', date: 'current_date'}})它是工作正常,(第一个条目)
但是当我试图添加它时,比如:

MODEL.update({ history: Sequelize.fn(
          'JSON_ARRAY_APPEND',
          Sequelize.col('history'),
          '$',
          `${Sequelize.fn('JSON_OBJECT', 'status', status, 'updated_at', new Date())}`
        )})

字符串
不管用。
我不想使用JSON.stringify()(它正在使用它)。但我想存储正确的对象数组。
谁能帮

0yycz8jy

0yycz8jy1#

使用JSON_MERGE_PRESERVE

const newHistory = {
  updated_at: new Date(),
};

await MODEL.update(
  {
    history: fn("JSON_MERGE_PRESERVE", 
      col("history"), 
      literal(`'${JSON.stringify(newHistory)}'`)
    ),
  },
  { where: { id: id } },
);

字符串
如果你的JSON是一个数组,这里是追加数组。

const newHistory = {
  status: 'pending',
  updated_at: new Date(),
  date: new Date(),
};

await MODEL.update(
  {
    history: fn("JSON_MERGE_PRESERVE", 
      col("history"), 
      literal(`'[${JSON.stringify(newHistory)}]'`)
    ),
  },
  { where: { id: id } },
);


如果还是错误,你可以检查日志,然后尝试在本地命令MySQL https://sequelize.org/docs/v6/getting-started/#logging中运行它

rggaifut

rggaifut2#

我是法国人,所以我的英语很差。
你的问题的解决方法很简单,只要把你最后一个Sequelize.fn周围的``去掉就行了。
替换:${Sequelize.fn('JSON_Notice ',' status ',status,'updated_at ',new Date())}
By:${Sequelize.fn('JSON_Bit ',' status ',status,'updated_at ',new Date())}

相关问题