私の使用例は次のとおりです。ハッシュ+範囲キーを持つDynamoテーブルがあります。私がテーブルに新しいアイテムを置くとき、私は一意性検査をしたいです。時々、ハッシュが一意であることを保証したい(範囲を無視する)。他の回は、重複ハッシュを許可したいが、ハッシュと範囲の組み合わせが一意であることを保証する。どうすればこれを達成できますか?DynamoDB - ハッシュ(またはハッシュと範囲の組み合わせ)が存在しない場合は、項目を入れます
私はattribute_not_existsで実験しました。それはハッシュ+キーの組み合わせをチェックする第2のケースを処理するようです。ここではPHPのサンプルです:
$client->putItem(array(
'TableName' => 'test',
'Item' => array(
'hash' => array('S' => 'abcdefg'),
'range' => array('S' => 'some other value'),
'whatever' => array('N' => 233)
),
'ConditionExpression' => 'attribute_not_exists(hash)'
));
奇妙なことに、私がattribute_not_exists(hash)
またはattribute_not_exists(range)
を使用している場合は関係していないようです。彼らはどちらもまったく同じことをしているようです。これはどのように動作するはずですか?
hash
を一意にチェックしたい場合はどうすればいいですか?
さらなる実験はattribute_not_existsは、この奇妙なロジックに従っていることを示しています ' attribute_not_exists(any_attribute_that_exists_in_the_table)は、ハッシュ+レンジの組み合わせがテーブルに存在しない場合はtrueを返し、そうでない場合はfalseを返します。 'attribute_not_exists(attribute_that_does_not_exist_in_the_table)'は常にtrueを返します。セカンダリインデックス(グローバルまたはローカル)は動作に影響しません。 – mrog