私はDynamoDBでドキュメントを 'アップサート'したいと考えています。つまり、キーとフィールドと値のペアのセットを指定したいと思います。そのキーを持つドキュメントが存在しない場合は、そのキーと指定したキーと値のペアで作成されたドキュメントはありません。そのキーを持つドキュメントが存在する場合は、指定したフィールドを指定した値に設定します(これらのフィールドが前に存在しなかった場合は追加する必要があります)。既存の文書の他の未指定フィールドはそのまま残すべきです。DynamoDBでネストされたフィールドをアップセットすることはできますか?
UpdateItem
コールでは、このフィールドと値のペアをすべて最上位のフィールドに設定すると、これを行うことができます。構造体がネストされている場合、構造体が存在する限り、UpdateItem
はネストされたフィールドを設定するように動作します。つまり、既存の文書に"foo": {}
がある場合、"foo.bar": 42
を正常に設定できます。
foo
オブジェクトが既に存在しない場合は、"foo.bar": 42
を設定することはできません(指定したフィールドのドキュメントがまったくなく、私の 'upsert'が
私はAWSのフォーラムで数年前からa discussionを見つけました。これは、私がやりたいことができないことを暗示しているようですが、最近変更されたと思っています。どうすればいいですか?
をあなたに別のデータポイントを与えるために、私はに見えましたこれは2015年の5月(ish)であり、あなたが言及した同じ問題がまだ存在しました。ネストされたフィールドアップサンプリングの目標を達成できませんでしたので、問題へのアプローチとデータの保存方法を変更する必要がありました。 – mkobit
@mkobitあなたのデータポイントに感謝します。それも私が来た結論です。私のデータは一定数のネストされたレベルを持っていたので、 'foo_bar'のような名前のフィールドを使ってデータをフラットにして保存しました。そしてDAOレイヤにマーシャル/アンマーシャリングコードを追加して翻訳しました。それは痛みですが、それは十分にうまくいくようです(少なくとも今のところ) – pkaeding
1年後に同じ問題が発生しました。迷惑な部分は、Dynamoがエラーをスローしないことです。データツリーのその部分を保存しないだけです。 – Jelling