Hier sind meine Anwendungsfälle: Ich habe eine Dynamo-Tabelle mit einem Hash + Bereich Schlüssel. Wenn ich neue Gegenstände in den Tisch lege, möchte ich eine Eindeutigkeitsprüfung durchführen. Manchmal möchte ich garantieren, dass der Hash eindeutig ist (den Bereich ignorierend). Andere Male möchte ich doppelte Hashes zulassen, aber garantiere, dass die Hash- und Bereichskombination eindeutig ist. Wie kann ich das erreichen?DynamoDB - Platzieren Sie Element, wenn Hash (oder Hash-und Bereichskombination) nicht existiert
Ich experimentierte mit attribute_nist_exists. Es scheint den zweiten Fall zu behandeln, wo es die Kombination aus Hash und Schlüssel überprüft. Hier ist ein PHP Beispiel:
$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)'
));
Merkwürdig ist, dass es keine Rolle scheint, wenn ich attribute_not_exists(hash)
oder attribute_not_exists(range)
verwenden. Beide scheinen genau das Gleiche zu tun. Soll das so funktionieren?
Irgendeine Idee, wie man den Fall behandelt, in dem ich nur hash
für Eindeutigkeit überprüfen möchte?
Weitere Experimente zeigen, dass attribute_not_exists diese bizarre Logik folgt: ' attribute_not_exists (any_attribute_that_exists_in_the_table) 'gibt true zurück, wenn die Hash + range-Kombination in der Tabelle nicht existiert, andernfalls wird false zurückgegeben. 'attribute_not_exists (attribute_that_does_not_exist_in_the_table)' gibt immer true zurück. Sekundäre Indizes (global oder lokal) haben keinen Einfluss auf das Verhalten. – mrog