Ich versuche, in Dynamo DB einzufügen. Wenn ich die Funktion putItem aufruft, was passiert, wenn der Hash-Schlüssel bereits in der DB vorhanden ist? Enthält das PutItemResult-Objekt etwas, das uns sagen kann, ob ein doppelter Hash-Eintrag versucht wurde? Ich möchte vermeiden, eine andere Abfrage auszuführen, um zu überprüfen, ob es einen Eintrag mit dem Hash-Schlüssel gibt, den ich verwende.Was passiert, wenn wir mit einem doppelten Hash-Schlüssel in Dynamo DB einfügen?
Antwort
Wenn Sie ein Element in einen vorhandenen Primärschlüssel einfügen, wird es überschrieben, sofern Sie nicht die "erwarteten Werte" verwenden. Hier ist die Einführung der offiziellen Dokumentation:
http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_PutItem.html
Erstellt ein neues Element oder ersetzt ein altes Element mit einem neuen Elemente (einschließlich aller Attribute). Wenn ein Artikel in der angegebenen Tabelle bereits mit demselben Primärschlüssel existiert, ersetzt der neue Artikel den vorhandenen Artikel vollständig. Sie können einen bedingten PORT ausführen (fügen Sie ein neues Element ein, wenn eines mit dem angegebenen Primärschlüssel nicht existiert) oder ein vorhandenes Element ersetzen, wenn es bestimmte Attributwerte aufweist.
Hinweis
Um sicherzustellen, dass ein neues Element nicht ein vorhandenes Element nicht ersetzen, verwenden Sie einen bedingten Put Betrieb mit für das Primärschlüssel Attribut auf false gesetzt vorhanden ist, oder Attribute.
Sie können aber auch UpdateItem
verwenden Felder einer bereits bestehenden Artikel zu aktualisieren: http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_UpdateItem.html
Ich denke, der sicherste Weg, wenn Sie ein Element erstellen möchten, ist nie putItem verwenden und immer UpdateItem verwenden. In meinem Fall benutze ich updateItem nur mit den Schlüsseln, um ein Objekt zu erstellen, wenn es bereits existiert, macht es nichts. –
Sie verwenden können ‚withReturnValues (ReturnValue.ALL_OLD)‘, die eine Karte von PutItemResult.getAttributes der zurück Werte, die vor dem Einfügen dort waren.
Wenn PutItemResult.getAttributes null zurückgibt, war es ein neuer Eintrag.
Verwenden Sie ein bestimmtes Framework? – yadutaf