首页 > 解决方案 > PutIf 与 PutIfExists 和 PutIfNotExists 有何不同

问题描述

我正在使用ScalarDB它在Cassandra. 参考文档,与和有何PutIf不同?PutIfExistsPutIfNotExists

我想 PutIfExists就像一个更新 PutIfNotExists就像一个新的添加

什么是 PutIf?什么时候使用它?

标签: scalardb

解决方案


PutIf可以添加条件来更新记录。您可以在没有任何其他条件的情况下PutIfExists只想更新时使用。另一方面,PutIfNotExists当您想要插入新记录而不会意外覆盖时,您必须使用。

例如,一个表有如下记录。pass如果分数大于等于 60,我们想更新一条记录。(我们假设之前已经插入了记录,并且我们已经计算了阈值(均值、中位数等),那么我们决定 ID 可以是否通过门槛。)

|pID|cID|score| pass|
|  0|  0|   80|false|
|  1|  0|   45|false|

以下put将更新要设置的第一true条记录pass

PartitionKey pk = new Key(new IntValue("pID", 0));
ClusteringKey ck = new Key(new IntValue("cID", 0));

PutIf condition = new PutIf(new ConditionalExpression("score", new IntValue(60), Operator.GTE));

Put put = new Put(pk, ck).withValue(new BooleanValue("pass", true)).withCondition(condition);

storage.put(put);

如果我们尝试用相同的条件更新第二条记录,它不会被更新,因为分数小于 60。


推荐阅读