ホームページ  >  記事  >  バックエンド開発  >  AWS Go SDK を使用して DynamoDB の単一フィールドのみを更新する方法

AWS Go SDK を使用して DynamoDB の単一フィールドのみを更新する方法

WBOY
WBOY転載
2024-02-05 23:51:12498ブラウズ

如何使用 AWS Go SDK 仅更新 DynamoDB 中的单个字段

質問の内容

誰かが私が苦労しているこの問題に光を当ててくれることを願っています。

ダイナモにこのテーブルがあります。これを people と呼びます。このテーブルには、パーティション キーとして id という属性、name があります。 ステータス。 単一のプロパティだけを更新するか、ID のすべてのプロパティを保存できるようにしたいと考えています。 さて、これが私のやり方です。次の構造を作成しました:

リーリー

サーバーからのリクエストは単に個人の姓を更新するだけなので、リクエストの本文は次のようになります:

リーリー

リクエストを構造体にバインドした後、dynamo に送信されるオブジェクトは次のようになります:

リーリー

ご覧のとおり、ダイナモに書き込むときは、1 つのプロパティのみを更新し、残りの null/null プロパティは無視する必要があります。

これを行うために記述されたコードは次のように要約できます:

リーリー

現在、更新には問題はありませんが、問題は、firstnamestatus に 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 サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。