通过querybuilder更新Cassandra Map Value

时间:2014-09-07 22:17:14

标签: collections cassandra-2.0

Cassandra支持通过语法

更新Collection中的特定值
ALTER TABLE users ADD todo map<timestamp, text>

UPDATE users SET todo['2012-10-2 12:00'] = 'throw my precious into mount doom'
  WHERE user_id = 'frodo';

http://www.datastax.com/documentation/cql/3.0/cql/cql_using/use_map_t.html

没有看到使用QueryBuilder更新Map中特定行的任何示例。怎么做?

1 个答案:

答案 0 :(得分:3)

我认为你有几种选择。

1 /根据CQL构建您自己的查询。

示例:假设您有一个名为Interactions的表,并且在您的架构中有一个名为'attributes'的列。

String update ="UPDATE demo.Interactions SET attributes=attributes + {'i':'j'} where id='ff';   
SimpleStatement statement = new SimpleStatement(update);
session.execute(statement);

2 /使用Java API。

Java API确实没有记录。 我们来举个例子

a-使用queryBuilder创建更新对象

Update update = QueryBuilder.update(keyspace, tableName); 

b-然后使用'put'或'putAll'函数填充。 put / putAll将添加/更新内容

  update.with(QueryBuilder.putAll(key, map));

要删除密钥,请将密钥的内容设置为null,例如:

for (Object item : map.keySet()) {                    
  update.with(
    QueryBuilder.put(columName, item, null)
  );
}

然后执行查询。

以下方法适用于不同类型:
列表:

QueryBuilder.appendAll(...)
QueryBuilder.discardAll(...)

SET:

QueryBuilder.addAll(...)
QueryBuilder.removeAll(...)

MAP:

QueryBuilder.putAll(...)
QueryBuilder.put(...)

该清单并不详尽。 如果找不到您要查找的内容,请查看QueryBuilder类。

与Cassandra一起致以最好的问候和好运。