Wie bringt man eine Eigenschaft in eine DynamoDB-Zeile hoch? Z.B. SET address.state = "MA"
für einen Artikel, wenn address
noch nicht existiert?
Ich habe das Gefühl, dass ich ein Henne-und-Ei-Problem habe, weil DynamoDB es nicht erlaubt, im Voraus ein schlampiges Schema zu definieren.
Wenn address
DID bereits für dieses Objekt existiert, vom Typ M
(für Map), sagt mir das Internet, dass ich einen UpdateExpression wie:
SET #address.#state = :value
mit #address
, #state
und :value
entsprechend zugeordnet zu address
, state
bzw. MA
.
Wenn die Eigenschaft address
jedoch nicht bereits existiert, gibt dies einen Fehler:
'' ' ValidationException: Der im Update-Ausdruck angegebene Dokumentpfad ist für die Aktualisierung ungültig '' '
Also ... es scheint, ich muss entweder:
address.state
" (z. B. SET address = {}; SET address.state = 'MA'
in einem einzigen Befehl) "upsert" können oder
SET address = {};
bei einem Fehler, und versuchen Sie es dann erneut. Wenn letzteres ... Wie lege ich eine leere Karte fest?!?
Ugh .. Ich mag Dynamo, aber wenn ich nicht etwas offensichtliches verpasse, ist das ein bisschen verrückt ..
Sie können geschachtelte Attribute nicht festlegen, wenn das übergeordnete Dokument nicht vorhanden ist. Da address
nicht existiert, können Sie das Attribut province
nicht darin setzen. Sie können Ihr Ziel erreichen, indem Sie address
beim Erstellen des Elements auf eine leere Map setzen. Anschließend können Sie die folgenden Parameter verwenden, um ein Update für ein Attribut address.province
noch nicht vorhanden zu konditionieren.
Übrigens musste ich Staat durch Provinz ersetzen, da Staat ein reserviertes Wort ist.
Eine andere völlig andere Methode besteht darin, einfach den Knoten address
zu erstellen, wenn Sie das übergeordnete Dokument an erster Stelle erstellen. Angenommen, Sie haben einen Hash-Schlüssel von id
, können Sie Folgendes tun:
Damit können Sie einfach den address.state
Wert setzen, da die address
Karte bereits existiert:
Sie können es mit zwei Rundreisen machen, die erste setzt bedingt eine leere Karte für address
, wenn sie noch nicht existiert, und die zweite setzt state
:
Dann:
%Vor%Tags und Links amazon-dynamodb