1

我正在研究一个使用 spring-data-cassandra 的 CassandraOperations 来更新 cassandra 表中的集合的示例。请分享,因为我发现很难做到正确。它也不能通过网络获得。

谢谢

更新

我查看了 spring-data-cassandra 的代码。目前他们只提供通过更新操作替换集合的选项。我将寻求扩展它并提供一个用于集合升级的 API

4

1 回答 1

0

这是一个使用 CQL3 的自包含示例。使用 java cassandra 驱动程序将其移植到 spring 应该不复杂。

cqlsh> CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1 };
cqlsh> CREATE COLUMNFAMILY test.example (name text PRIMARY KEY, emails list<text>);
cqlsh> UPDATE test.example SET emails = ['fake@mail.com'] where name='lyuben';
cqlsh> SELECT * FROM test.example;

 name   | emails
--------+-------------------
 lyuben | ['fake@mail.com']

(1 rows)
cqlsh> UPDATE test.example SET emails = ['not@real.net'] + emails where name='lyuben';
cqlsh> SELECT * FROM test.example;                                              
 name   | emails
--------+-----------------------------------
 lyuben | ['not@real.net', 'fake@mail.com']

(1 rows)
cqlsh> UPDATE test.example SET emails = emails + ['maybe@legit.cc'] where name='lyuben';
cqlsh> SELECT * FROM test.example;                                              
 name   | emails
--------+-----------------------------------------------------
 lyuben | ['not@real.net', 'fake@mail.com', 'maybe@legit.cc']

(1 rows)

DOCS here和 here 是其他集合中的一些。

唯一需要注意的是,将新的集合元素附加在语句的开头还是结尾会有所不同:

// post-append
['not@real.net'] + emails
['not@real.net', 'fake@mail.com']
// pre-append
emails = emails + ['maybe@legit.cc']
['not@real.net', 'fake@mail.com', 'maybe@legit.cc']
于 2015-02-06T19:58:38.063 回答