我在MariaDB/MySQL中有以下JSON:
[{"uid": 5}, {"uid": 6}, {"uid": 7}]
user_pst_tb
------------------------------
pst_id | pst_liked_by
--------------------------
1 |[]
-------|----------------
. |[{"uid": 9}]
-------|----------------
. |[]
-------|----------------
29 |[]
-------|----------------
30 | [{"uid": 5}, {"uid": 6}, {"uid": 7}]
我想使用JSON_REMOVE或任何方法在pst_id = 30
上单独删除{"uid": 6}
,但我找不到如何表示路径.我想到了这个:
UPDATE user_pst_tb
SET `pst_liked_by` = JSON_REMOVE(
`pst_liked_by`, JSON_UNQUOTE(
REPLACE(
JSON_SEARCH( `pst_liked_by`, 'one', '6', null, '$**.uid' )
, '.uid'
, ''
)
)
) WHERE pst_id = 30;
出于某种原因,MariaDB和MySQL文档没有这样的示例.如有任何帮助,我们不胜感激.
我也try 过:
UPDATE user_pst_tb SET `pst_liked_by`= JSON_REMOVE(`pst_liked_by`, JSON_UNQUOTE( JSON_SEARCH(`pst_liked_by`, 'one','{"uid": 6}') )) WHERE `pst_id` = 30;
第二个查询令人遗憾地清除了所有JSON
个数据
UPDATE 1 (some GOOD NEWS)个 我试过这个
UPDATE user_pst_tb SET `pst_liked_by` =
JSON_REMOVE(`pst_liked_by`,JSON_UNQUOTE(JSON_search(`pst_liked_by`,
'one', '6'))) WHERE `pst_id` = 30;
不知何故奏效了,但留下了大约{}
英镑的空头支票.
例:[{"uid": 5}, {}, {"uid": 7}]
任何go 掉空方括号的 idea 都会很棒!