指定された条件が満たされた場合にのみ、データテーブル内のデータを更新するために条件付き更新機能を使用できます。条件が満たされない場合、更新は失敗します。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
使用上の注意
PutRow、UpdateRow、DeleteRow、または BatchWriteRow 操作を呼び出してデータを更新する場合、条件付き更新を使用して行の有無の条件と列ベースの条件を確認できます。条件が満たされた場合にのみ、更新は成功します。
条件付き更新は、行の有無の条件と列ベースの条件に基づいて実行できます。
行の有無の条件には、IGNORE、EXPECT_EXIST、および EXPECT_NOT_EXIST が含まれます。
データテーブルを変更すると、Tablestore は最初に 行の有無の条件を確認します。行の有無の条件が満たされない場合、変更は失敗し、エラーが報告されます。
列ベースの条件には、SingleColumnCondition と CompositeCondition が含まれます。これらは、1 つ以上の列の値に基づいて条件が満たされているかどうかを判断するために使用されます。
列ベースの条件では、=, !=, >, >=, <, <= などの関係演算子がサポートされています。列ベースの条件では、NOT、AND、OR などの論理演算子もサポートされています。条件付き更新には、最大 10 個の列ベースの条件を指定できます。
SingleColumnCondition は、定数と列の比較をサポートします。列は主キー列にすることができます。SingleColumnCondition は、2 つの列と 2 つの定数の比較をサポートしていません。
論理演算子は、CompositeCondition のサブ条件を結合するために使用されます。サブ条件は、SingleColumnCondition または CompositeCondition にすることができます。
条件付き更新を使用して、オプティミスティック ロックを実行できます。行を更新する場合は、特定の列の値を取得し、その列の値に基づいて行の更新条件を指定する必要があります。たとえば、行の列 A の値を 2 に更新する場合、列 A の値を取得する必要があります。この例では、取得した値は 1 です。次に、列 A の値が 1 の場合にのみ行を更新できるように指定する必要があります。指定された条件が満たされると、更新は成功します。別のクライアントによって行が更新された場合、更新は失敗します。
パラメーター
パラメーター | 説明 |
RowExistenceExpectation | 行の有無の条件。テーブルを変更すると、Tablestore は行の有無の条件を確認します。行の有無の条件が満たされない場合、変更は失敗し、エラーが報告されます。 行の有無の条件には、IGNORE、EXPECT_EXIST、および EXPECT_NOT_EXIST が含まれます。Tablestore では、RowExistenceExpectation_IGNORE は IGNORE を指定するために使用され、RowExistenceExpectation_EXPECT_EXIST は EXPECT_EXIST を指定するために使用され、RowExistenceExpectation_EXPECT_NOT_EXIST は EXPECT_NOT_EXIST を指定するために使用されます。
|
columnName | 列の名前。 |
columnValue | 列の比較値。 |
comparator | 列の値を比較するために使用される関係演算子。関係演算子の種類については、ComparatorType を参照してください。 関係演算子には、EQUAL(=), NOT_EQUAL(!=), GREATER_THAN(>), GREATER_EQUAL(>=), LESS_THAN(<), LESS_EQUAL(<=) が含まれます。Tablestore では、CT_EQUAL は EQUAL(=) を指定するために使用され、CT_NOT_EQUAL は NOT_EQUAL(!=) を指定するために使用され、CT_GREATER_THAN は GREATER_THAN(>) を指定するために使用され、CT_GREATER_EQUAL は GREATER_EQUAL(>=) を指定するために使用され、CT_LESS_THAN は LESS_THAN(<) を指定するために使用され、CT_LESS_EQUAL は LESS_EQUAL(<=) を指定するために使用されます。 |
combinator | 複数の条件を組み合わせる論理演算子。論理演算子の種類については、LogicalOperator を参照してください。 論理演算子には、NOT、AND、OR が含まれます。Tablestore では、LO_NOT は NOT を指定するために使用され、LO_AND は AND を指定するために使用され、LO_OR は OR を指定するために使用されます。 指定できるサブ条件の数は、使用する論理演算子によって異なります。
|
passIfMissing | 行に列が存在しない場合に条件チェックをパスするかどうかを指定します。このパラメーターの値はブール型です。デフォルト値は true です。これは、行に列が存在しない場合、条件チェックに合格し、行が更新条件を満たすことを指定します。 passIfMissing パラメーターを false に設定し、行に列が存在しない場合、条件チェックは失敗し、行は更新条件を満たしません。 |
latestVersionOnly | 列に複数のバージョンの値がある場合、比較に最新バージョンの値のみを使用するかどうかを指定します。このパラメーターの値はブール型です。デフォルト値は true です。これは、列に複数のバージョンの値がある場合、比較に最新バージョンの値のみが使用されることを指定します。 latestVersionOnly パラメーターを false に設定し、列に複数のバージョンの値がある場合、すべてのバージョンの値が比較に使用されます。この場合、少なくとも 1 つのバージョンが条件を満たしている場合、条件チェックに合格し、行は更新条件を満たします。 |
例
指定された主キーに基づいて行を更新します。指定された行が存在し、「name」列の値が「john」で、「addr」列の値が「china」の場合、更新は成功します。それ以外の場合、更新は失敗します。
var params = {
tableName: "sampleTable",
primaryKey: [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
updateOfAttributeColumns: [{ 'PUT': [{ 'col1': 'test6' }] }]
};
// 更新条件を指定します。指定された行が存在し、「name」列の値が「john」で、「addr」列の値が「china」の場合にのみ、データを更新できるように指定します。
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('name', 'john', TableStore.ComparatorType.EQUAL));
condition.addSubCondition(new TableStore.SingleColumnCondition('addr', 'china', TableStore.ComparatorType.EQUAL));
params.condition = new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, condition);
client.updateRow(params,
function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});