Quelqu'un pourrait me dire comment définir une carte comme valeur pour un attribut qui n'existe pas encore. J'ai essayé une expression de mise à jour "SET MyAttr.#key = :val"
, mais cela ne fonctionne que si l'attribut existe et si la valeur de l'attribut est déjà une carte.Comment insérer une carte comme valeur d'attribut lorsque l'attribut n'existe pas encore avec DynamoDB?
J'ai essayé d'utiliser à la place "ADD MyAttr.#key = :val"
, mais je reçois:
UpdateExpression non valide: Erreur de syntaxe; jeton: "=", près: "#key =: val"
J'utilise Java. Notez que j'utilise une tentative d'une requête UpdateItem pour le faire. Il m'est juste venu à l'esprit que cela ne fonctionne peut-être pas avec les cartes. J'ai juste supposé que ce serait parce que j'ai toujours pu avoir un nouvel élément et/ou attribut créé avec une demande de mise à jour s'il n'existe pas déjà (avec d'autres types de données de valeur d'attribut comme chaîne, nombre, etc.).
Cela répond à la question que j'ai posée et cela fonctionne. Mais est-il possible d'effectuer une mise à jour par laquelle Dynamo va ajouter à la carte si elle existe déjà? La solution que vous avez fournie écrasera toute carte existante. Ou dois-je d'abord rechercher l'élément, puis créer un UpdateItemSpec différent selon que l'élément/attr existe ou non? – RTF
Oui, c'est possible! Je vais éditer ma réponse pour vous montrer un exemple. –
Merci pour la mise à jour, mais ce que je cherche est une mise à jour one-shot qui sera soit a). Créez une carte avec ma paire clé/valeur et définissez la carte comme valeur de mon attribut, si l'élément et/ou l'attribut n'existe pas encore, ou b). mettre à jour la carte existante dans mon attribut avec la paire clé/valeur spécifiée. Je pense que ce n'est pas possible dans une seule demande cependant: https://stackoverflow.com/questions/35377729/how-to-set-a-dynamodb-map-property-value-when-the-map-doesnt-exist- encore? rq = 1 – RTF