Cassandra,如果集合包含值,则删除



我是Cassandra的初学者,我有一个这样的表:

CREATE TABLE Books(
Title text PRIMARY KEY,
Authors set<text>,
Family set <text>,
Publisher text,
Price decimal
);

(其他选项缺失,因为这只是一个例子(

现在我想执行这个查询:

DELETE Price FROM Books WHERE Authors CONTAINS 'J.K. Rowling' IF EXISTS;

但它不起作用。我在谷歌上搜索了一下,但一无所获。

希望有人能帮助我,如果我的英语不太好,我很抱歉。

,但它不起作用。

这并没有给我们提供足够的信息来帮助您。通常,您需要提供一条错误消息。我在本地构建了您的表,插入了数据,并尝试了您的方法。这就是我看到的错误:

InvalidRequest: Error from server: code=2200 [Invalid query]
message="Some partition key parts are missing: title"

DELETE要求在WHERE子句中指定适当的PRIMARY KEY组件。在您的情况下,Authors是PRIMARY KEY定义的部分,而不是部分。给定返回的错误消息(以及表定义(,指定title是从此表中删除行的唯一方法。

aploetz@cqlsh:stackoverflow> DELETE FROM Books 
WHERE title = 'Harry Potter and the Chamber of Secrets'
IF EXISTS;
[applied]
-----------
True

我可以做这样的查询吗?UPDATE Books SET Family = Family + {'Fantasy'} WHERE Authors CONTAINS 'J.K. Rowling';

否。出于同样的原因,这项计划失败了。Cassandra中的写入(INSERTs、UPDATEs、DELETE都是写入(需要WHERE子句中的主键(特别是分区键(。如果没有这一点,Cassandra就无法确定哪个节点保存数据,它需要这些数据来执行写入。

最新更新