表名
guilds
数据
members = {
'look': [{
id: '123',
bot: false,
username: 'Joe',
}, {
id: '456',
bot: false,
username: 'Jeff',
}]
};“查看”包含一组json对象。“会员”是表“行会”中一行的名称。我的目标是编辑id '123‘到Janett的用户名。
在JavaScript中使用MySQL8.0。(使用模块mysql、Node.js)。
我试过
我尝试获取成员行,然后解析结果并将新值赋给相应的字段。原来mysql并没有像猫鼬一样从那里更新它的任何功能。
connection.query(`SELECT members FROM guilds WHERE id='${_guild_id}'`, (err, result) => {
let parse = JSON.parse(result[0].members);
parse.look.forEach(element => {
if (element.id === '123') {
element.username = "some name"
}
});
});发布于 2020-05-25 21:32:00
一种选择是使用json_table将数组完全撤消为列和行,然后重新构建对象(这需要事先知道对象的复杂结构)。
首先,考虑以下select查询,该查询解析、修改和重新构建对象:
select json_object(
'look',
json_arrayagg(
json_object(
'id', j.id,
'bot', j.bot,
'username', case when j.id = 123 then 'Janett' else j.username end
)
)
) v
from guilds g
cross join json_table(
g.members ->> '$.look',
'$[*]'
columns (
id int path '$.id',
bot boolean path '$.bot',
username varchar(100) path '$.username'
)
) j
where id = 1然后,您可以将其转换为update查询,如果这是您想要的:
update guilds g
inner join (
select g.id, json_object(
'look',
json_arrayagg(
json_object(
'id', j.id,
'bot', j.bot,
'username', case when j.id = 123 then 'Janett' else j.username end
)
)
) new_members
from guilds g
cross join json_table(
g.members ->> '$.look',
'$[*]'
columns (
id int path '$.id',
bot boolean path '$.bot',
username varchar(100) path '$.username'
)
) j
where g.id = 1
group by g.id
) x
on g.id = x.id
set g.members = x.new_membershttps://stackoverflow.com/questions/62010614
复制相似问题