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

Cassandra, Delete if a set contains value

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

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;

但是没用。我在 Google 上进行了搜索,但一无所获。

希望有人能帮助我,如果我的英语不是很好,请见谅。

but it doesn't work.

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

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

DELETE 要求在 WHERE 子句中指定适当的 PRIMARY KEY 组件。在您的情况下,Authors 是 PRIMARY KEY 定义的 而不是 的一部分。鉴于返回的错误消息(和 table 定义),指定 title 是从此 table.

中删除行的唯一方法
aploetz@cqlsh:Whosebug> DELETE FROM Books 
    WHERE title = 'Harry Potter and the Chamber of Secrets'
    IF EXISTS;

 [applied]
-----------
      True

Can I do a query like this? UPDATE Books SET Family = Family + {'Fantasy'} WHERE Authors CONTAINS 'J.K. Rowling';

没有。出于同样的原因,这失败了。在 Cassandra 中写入(INSERT、UPDATE、DELETE 都是写入)需要 WHERE 子句中的主键(特别是分区键)。没有它,Cassandra 无法确定哪个节点保存数据,它需要那个节点来执行写入。