假设我有一个带有JSON数据的文本字段,如下所示:
{
"id": {
"name": "value",
"votes": 0
}
}
有没有办法编写一个查找id
然后会增加votes
值的查询?
我知道我可以只检索我需要的JSON数据更新并重新插入更新版本,但我想知道有没有办法在不运行两个查询的情况下执行此操作?
答案 0 :(得分:3)
UPDATE `sometable`
SET `somefield` = JSON_REPLACE(`somefield`, '$.id.votes', JSON_EXTRACT(`somefield` , '$.id.votes')+1)
WHERE ...
修改强>
As of MySQL 5.7.8,MySQL支持本机JSON数据类型,可以高效访问JSON文档中的数据。
JSON_EXTRACT将允许您访问JSON字段中的特定JSON元素,而JSON_REPLACE将允许您更新它。
要指定要访问的JSON元素,请使用格式为
的字符串'$.[top element].[sub element].[...]'
因此,在您的情况下,要访问 id.votes ,请使用字符串'$。id.votes'。
上面的SQL代码演示了将所有这些放在一起以将JSON字段的值增加1。
答案 1 :(得分:0)
我认为对于这样的任务,您使用普通的SELECT
后跟UPDATE
(在解析JSON之后,增加所需的值,然后将JSON序列化) )。
您应该将这些操作包装在一个事务中,如果您正在使用InnoDB,那么您也可以考虑使用SELECT ... FOR UPDATE
:http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html
这有点像切线,但我想我还要提到这是像MongoDB这样的NoSQL数据库非常擅长的操作类型。