我想(理想)喜欢卡桑德拉利用纯JSON(例如,类似于“INSERT INTO <table_name> JSON '<json_object_string>';
” CQL语句)更新一行。但是,它不会出现通过CQL UPDATE语句存在这样的功能。
我考虑的一个(脑死亡)的方法是删除,然后重新插入相关行。然而,这种方法肯定有它的缺点 - 因此,从我的考虑范围消除它。
我实现了利用“UPDATE <table_name> SET <key1> = '<new_value1>', <key2> = '<new_value2>', ..., <keyN> = '<new_valueN>';
” CQL语句中的版本。但是,如果有类似“UPDATE <table_name> JSON '<new_json_object_string>';
”,我真的很想知道。
在卡桑德拉,INSERT
和UPDATE
是相同的操作。对于Cassandra的JSON支持,没有UPDATE
能力。
也没有局部JSON更新支持,即在插入行后,则不能作为来自有效载荷JSON任何ommitted列被插入为空值(墓碑)更新使用JSON各个列。但是,您可以使用常规的INSERT
/ UPDATE
查询。
CASSANDRA-11424试图解决这个问题。
该功能现在在CQL 5.1可用。语法是:
INSERT INTO table_name JSON '{"column1": "value1", "column2": "value2"}' DEFAULT UNSET;
该DEFAULT UNSET
选项使它只覆盖在JSON字符串中找到的值。因此,举例来说,如果你有其他的列(如栏3,column4)与数据记录,上面的INSERT语句运行时,这些列将保留其原始数据。
你可以按照下面的查询更新卡桑德拉CQL一个JSON列
update <schema_name>.<table_name> set <COLUMN_NAME> = {amount : 4.2,iso_code: 'USD'} WHERE <COLUMN1> = <VALUE1> and <COLUMN2> = <VALUE2>;
替换=有值按您的需求
记住:关键名称将是没有双引号和值将在单引号,如上面的例子