首页 > 解决方案 > 如何在 Cassandra 中更新和替换 UDT 字段值?

问题描述

Cassandra 是否支持更新 UDT 字段值?像用新值替换它?

我有 user_fav_payment_method UDT,我需要用借记卡替换现金:

update user_ratings set 
user_fav_payment_method{'cash'} = {'debit cards'}
where rating_id = 66;

这段代码是错误的,但我需要做类似的事情,我该怎么做?

标签: cassandra

解决方案


根据文档

在 Cassandra 3.6 及更高版本中,仅包含非集合字段的用户定义类型可以更新单个字段值。使用 UPDATE 命令更新用户定义类型数据中的单个字段。所需的键值对在命令中定义。为了更新,UDT 必须在 CREATE TABLE 命令中定义为未冻结的数据类型。

您可以使用.表示法仅更新非冻结 UDT 的单个字段,如下所示:

cqlsh> use test;
cqlsh:test> create type payment_method ( method text, data text);
cqlsh:test> create table users (id int primary key, pay_method payment_method);
cqlsh:test> insert into users (id, pay_method) values (1, {method: 'cash', data: 'usd'});
cqlsh:test> select * from users;

 id | pay_method
----+-------------------------------
  1 | {method: 'cash', data: 'usd'}

(1 rows)

cqlsh:test> update users set pay_method.method = 'card' where id = 1;
cqlsh:test> select * from users;

 id | pay_method
----+-------------------------------
  1 | {method: 'card', data: 'usd'}

(1 rows)

推荐阅读