Cassandra中CQL3的Map更新

3
我有一个在Cassandra中的CF,它具有列类型为map。
这个CF如下所示:
CREATE TABLE word_cat ( 
   word text, 
   doc_occurrence map <text, int >,
   total_occurrence map <text, int >,   
   PRIMARY KEY (word)
);

我想更新doc_occurrence,使一个键的值加上一个新数字。我想在一条查询中完成此操作。
我认为可以像这样在一条查询中完成:
UPDATE word_cat SET doc_occurrence ['key']=doc_occurrence ['key']+5 WHERE word='name';

但它无法运行,有人能帮忙吗?
1个回答

0
最好用例子来解释,所以我只考虑你的模式。
现在我要插入一些数据,然后是输出。
cqlsh:ks1> update word_cat set
           ...  doc_occurrence=
           ...  {'cassandra' : 1}
           ...  where word ='name';
cqlsh:ks1> SELECT * FROM word_cat ;

 word | doc_occurrence | total_occurrence
------+----------------+------------------
 name | {cassandra: 1} |             null

现在如果你想要覆盖你的映射中已经存在的键(cassandra,其值为5),那么请看这里

cqlsh:ks1> update word_cat set
           ...  doc_occurrence=
           ...  {'cassandra' : 5}
           ...  where word ='name';

cqlsh:ks1> SELECT * FROM word_cat ;

 word | doc_occurrence | total_occurrence
------+----------------+------------------
 name | {cassandra: 5} |             null

更新:

您在评论中提到的功能是在地图中包含计数器值。但不幸的是,计数器不允许在集合内部,我会说它还没有得到支持。 也许您可以有一个单独的计数器列族来处理这些事情。


1
不,我想将现有键的值加上新值。 在这个例子中,cassandra 的值变为 1+5=6。 {cassandra:6} - mshzmkot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接