如何使用nodejs更新mysql json数组

Posted

技术标签:

【中文标题】如何使用nodejs更新mysql json数组【英文标题】:how to update a mysql json array using nodejs 【发布时间】:2020-08-27 01:21:09 【问题描述】:

我正在使用 mysql 5.6,因此无法访问 mysql 中现有的 JSON 函数 - 所以寻找一些巧妙的解决方法...

我的 mysql 数据库中有一个 Story 表,其中有一个名为“tags”的字段。标签只是一个字符串字段,存储一个 JSON 的 tagId 数组,例如 [2,5,6],它与另一个名为 tag 的表相关联。 这使我可以通过组合 json 数组和标签数据轻松地在我的 UI 中重建标签信息。

但是现在我需要更新数据库中的这些标签,这证明具有挑战性。 例如,如果我想删除 id = 6 的标签,则需要将其从故事中引用的所有位置中删除,即

update story set tags = new tag list excluding 6 where tags used to contain 6

我不确定如何在 mysql 中正确使用这些 JSON blob。

同样在某些情况下我想用另一个标签ID替换一个标签,即

update story set tags = new tag list excluding 6 and including new tag id where tags used to contain 6

我可以全部检索它们并从服务器(即 Nodejs)中进行单独处理并单独更新每条记录,但似乎效率很低。

这里正确或期望的方法是什么?

【问题讨论】:

【参考方案1】:

“正确”的方法是创建另一个表 story_tags (id, tag_id, story_id)story 表具有一对多关系。然后你可以简单地这样做:

select tag_id from story_tags were story_id = xx

delete from story_tags were tag_id = xx

但是,这需要重新设计应用的数据模型。

一种不太理想的方法是创建一个类以按照您描述的方式处理应用程序中的标签逻辑。对于此解决方案,您需要评估更新/删除发生的频率以及性能显着下降的可接受程度。一次扫描/更新几千行不应该对整体性能产生太严重的影响。

【讨论】:

谢谢。我决定首先使用 json blob 是为了避免使用 story_tag 关系表。所以仍然努力看看我是否能找到一个聪明的解决方案来处理这个问题。例如,为了查询特定标签,我创建了一个视图,该视图将 json 数组提取到可搜索的字符串中,但现在更新证明具有挑战性。 就我个人而言,我只会将 JSON blob 用于静态/缓存目的,而从不用于连接/过滤器。在此处查看答案:***.com/questions/33660866/…

以上是关于如何使用nodejs更新mysql json数组的主要内容,如果未能解决你的问题,请参考以下文章

我如何通过nodejs返回获取mysql json

如何使用我的 MYSQL 数据库中的数据填充 JSON 数组?

如何更新 json 类型的 json 中的任何字段?它应该接受一个对象或一个键数组,如果它存在则更新键,否则创建

如何使用 NodeJS + AngularJS 从文件中删除一些奇怪的错误

如何从 Nodejs Mysql 获取 JSON 类型作为 JSON 而不是 String

mysql 如何更新数组中的值