誰かが私が苦労しているこの問題に光を当ててくれることを願っています。
ダイナモにこのテーブルがあります。これを people
と呼びます。このテーブルには、パーティション キーとして id
という属性、name
があります。 姓
とステータス
。
単一のプロパティだけを更新するか、ID のすべてのプロパティを保存できるようにしたいと考えています。
さて、これが私のやり方です。次の構造を作成しました:
サーバーからのリクエストは単に個人の姓を更新するだけなので、リクエストの本文は次のようになります:
リーリーリクエストを構造体にバインドした後、dynamo に送信されるオブジェクトは次のようになります:
リーリーご覧のとおり、ダイナモに書き込むときは、1 つのプロパティのみを更新し、残りの null/null プロパティは無視する必要があります。
これを行うために記述されたコードは次のように要約できます:
リーリー現在、更新には問題はありませんが、問題は、firstname
と status
に null 値も渡されていることです。ドキュメントを読んでみましたが、まだ少し混乱しています。 Java SDK では、update_skip_null_attributes
というフラグを渡すことができます。これにより、これらの null 値をスキップし、データのある値のみを更新できるようになります。 go でこれに相当するものが何かはわかりません。ヘルプ/ガイダンスがあれば幸いです。
更新:
次のモデルを使用してみてください:
リーリー@jarmod と @fedonev のアドバイスに従ってください。論理的に、そしてドキュメントを使用すると、これが機能する理由は理解できますが、残念ながら機能しません
SDK を v1 から v2 に切り替えて、更新することで解決するかどうかを確認することにしましたが、また同じ苦境に陥っています。これは私の更新機能がどのように見えるかです。
リーリー最終的に、更新したい ID で JSON ペイロードをクエリし、クエリで実行したい内容の違いに基づいて更新するクエリと作成関数を作成することで、問題を解決しました。空のフィールドは置き換えられます。クエリ結果による。これまでのところ、問題は解決しましたが、意図した機能で更新する方法をまだ疑問に思っています。
@jarmodさんのコメントにあるように、dynamodbav:",omitempty"
タグをマーシャリング構造に適用する場合はスキップしてください。ゼロ値フィールド :
[編集: 使用法を追加] marshalmap
ラベルを考慮して、ゼロ値フィールドは無視されるようになりました。マップを反復処理して更新式を作成します:
op に示すように、式を構築し、その出力を updateitem
に渡します。
以上がAWS Go SDK を使用して DynamoDB の単一フィールドのみを更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。